Hallo, dieser Code funktioniert gut Speichern auf einem gemeinsamen Speicher Ganzzahlen, aber ich möchte Zeichenfolgen speichern, wie kann ich es ändern, um das zu tun?
Zum Beispiel wird die Ausgabe geschrieben: Dies ist die Zeile Nummer 1 und in der nächsten Zeile geschrieben: Dies ist die Zeilennummer 2Speichern Sie eine Zeichenfolge in einem freigegebenen Speicher 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);
}
In C ist eine Zeichenfolge nur eine Folge von 'char' Elementen, gefolgt vom Sonderzeichen' '\ 0''. Der Unterschied zwischen einem "Array" von ganzen Zahlen und einem "Array" von Zeichen ist die Größe jedes Elements, und diese Zeichenfolgen haben einen Terminator. –
Der gepostete Code wird nicht kompiliert. Aus zwei Gründen. 1) fehlende Anweisung: '#include' 2) der Rückgabetyp von der 'main()' Funktion ist 'int', nicht' void'. Aktivieren Sie beim Kompilieren immer die Warnungen und beheben Sie diese Warnungen. (für 'gcc', bei minimaler Verwendung:' -Wall -Wextra -pedantic' verwende ich auch: '-Wconversion -std = gnu99') –
user3629249