// reading if((shmid = shmget(key, 0, 0)) < 0) { perror("shmget"); exit(50); } // attach if((data = shmat(shmid, (void *)0, 0)) == (char *) -1) { perror("shmat"); exit(100); } // get memory size struct shmid_ds shm_info; size_t shm_size; int shm_rc; if((shm_rc = shmctl(shmid, IPC_STAT, &shm_info)) < 0) exit(101); shm_size = shm_info.shm_segsz;
Sometimes the data does not end with zero and calling strlen (data) calls segfaults ...
So, I tried to make sure it is null-terminated by creating
data[shm_size] = '\0';
But now sometimes it fails in this line of code.
What am I doing wrong?
EDIT: Thanks for your support! I think after your explanation about strlen () + 1 == shm_size, I changed the rest of my code not posted here, and everything seems to be fine. I am waiting for new segfault and hope that I do not get them;)
source share