在SHM段中分配字符串会破坏整个结构

问题描述 投票:0回答:1

我遇到了一个问题,对我来说似乎有点奇怪。

快速浏览:

#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

c shared-memory
1个回答
0
投票

[最有可能,当您第一次分配ShmBlock时,它为零,因此在您进行测试时

if (strlen(str) > strlen(shm->str))

[strlen(shm->str)为0(NUL中的第一个字符),因此您只返回-1而无需复制字符串。

© www.soinside.com 2019 - 2024. All rights reserved.