我遇到了一个问题,对我来说似乎有点奇怪。
快速浏览:
#define LENGTH 2048
struct ShmBlock
{
int value_1;
char str[LENGTH];
}
int AssignStr(struct ShmBlock* shm, char* str)
{
if(strlen(str) > LENGTH)
return -1;
strncpy(shm->str, str, sizeof(shm->str));
return 0;
}
代码已简化,但我试图显示导致错误的代码行。首先,我当然建立了与SHM的连接,并且看起来工作正常,我可以毫无问题地分配int值,但是当我调用AssignStr()时会发生一些奇怪的事情,通常不会复制字符串,并且每次都尝试调用shm-> str最终出现分段错误,第二件事令我惊讶的是,调用AssignStr()将我的int值更改为一些随机数。您知道造成此问题的原因吗?为什么这个错误会影响int值? 0.o
[最有可能,当您第一次分配ShmBlock时,它为零,因此在您进行测试时
if (strlen(str) > strlen(shm->str))
[strlen(shm->str)
为0(NUL中的第一个字符),因此您只返回-1而无需复制字符串。