Привет, этот код отлично работает в целых числах с общей памятью, но я хочу хранить строки, как я могу изменить его для этого?
Например, выход будет Письменное: Это номер строки 1 и в следующей строке: Это линия номер 2Сохраните строку в общей памяти C
#include <string.h>
#include <stdio.h>
#include <memory.h>
#include <sys/shm.h>
#include <unistd.h>
void main()
{
key_t Clave;
int Id_Memoria;
int *Memoria = NULL;
int i,j;
Clave = ftok ("/bin/ls", 33);
if (Clave == -1)
{
printf("No consigo clave para memoria compartida");
exit(0);
}
Id_Memoria = shmget (Clave, 1024, 0777 | IPC_CREAT);
if (Id_Memoria == -1)
{
printf("No consigo Id para memoria compartida");
exit (0);
}
Memoria = (int *)shmat (Id_Memoria, (char *)0, 0);
if (Memoria == NULL)
{
printf("No consigo memoria compartida");
exit (0);
}
for (j=0; j<100; j++)
{
Memoria[j] = j;
printf("Written: %d \n" ,Memoria[j]);
}
shmdt ((char *)Memoria);
shmctl (Id_Memoria, IPC_RMID, (struct shmid_ds *)NULL);
}
В C строка представляет собой последовательность элементов 'char', за которой следует специальный символ' '\ 0''. Разница между «массивом» целых чисел и «массивом» символов - это размер каждого элемента, а в строках есть терминатор. –
опубликованный код не очищает компиляцию. По двум причинам. 1) отсутствует инструкция: '#include' 2) тип возврата из функции 'main()' - 'int', а не' void'. При компиляции всегда включайте предупреждения, затем устанавливайте эти предупреждения. (для 'gcc', при минимальном использовании:' -Wall -Wextra -pedantic' Я также использую: '-Wconversion -std = gnu99') –
user3629249