Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 尺寸长度不正确?_C - Fatal编程技术网

C 尺寸长度不正确?

C 尺寸长度不正确?,c,C,MessageMaxLength始终给我一个值4,即使长度大于4。为什么会发生这种情况,我该如何解决?它的类型是size\u t,我没有在任何地方声明它,它只是一个传入的值: place_value(int task, struct PDB *llist, char *theMessage, size_t theMessageMaxLength) 按如下方式调用上述方法: place_value(task, llist, theMessage, sizeof(theMessage)); 我

MessageMaxLength始终给我一个值4,即使长度大于4。为什么会发生这种情况,我该如何解决?它的类型是size\u t,我没有在任何地方声明它,它只是一个传入的值:

place_value(int task, struct PDB *llist, char *theMessage, size_t theMessageMaxLength)
按如下方式调用上述方法:

place_value(task, llist, theMessage, sizeof(theMessage)); 
我假设这是长度设置为4的地方,但是,如果我的消息更大,它不应该设置为更大的值吗?我如何增加尺寸,使其不只是4

然后在传递到的函数中这样使用:

strncpy(llist->data1, theMessage, theMessageMaxLength);
llist->data1[theMessageMaxLength] = '\0';

看起来你把sizeof和strlen搞混了

sizeoftheMessage只提供char*的大小,在您的情况下,char*是指针-4字节。如果需要字符串的长度,则需要使用strlentheMessage


看起来你把sizeof和strlen搞混了

sizeoftheMessage只提供char*的大小,在您的情况下,char*是指针-4字节。如果需要字符串的长度,则需要使用strlentheMessage


您正在测量指针的大小,在32位平台上为4

您正在测量指针的大小,在32位平台上为4

sizeoftheMessage与sizeofchar*完全相同。也许您对以下情况感到困惑:

char theMessage[1024];

/* ... some code here ...*/

printf("sizeof(theMessage): %zd\n", sizeof(theMessage));
如果为消息分配内存,则应提供其大小

编辑:作为一个侧节点,您可能对strndup感兴趣,它自动分配内存,并在目标字符串的末尾附加一个空字符。当然,你必须小心,别忘了释放它。

sizeoftheMessage与sizeofchar*完全相同。也许您对以下情况感到困惑:

char theMessage[1024];

/* ... some code here ...*/

printf("sizeof(theMessage): %zd\n", sizeof(theMessage));
如果为消息分配内存,则应提供其大小

编辑:作为一个侧节点,您可能对strndup感兴趣,它自动分配内存,并在目标字符串的末尾附加一个空字符。但当然,你必须小心,别忘了释放它