size_t的长度不正确?

时间:2011-12-16 02:13:00

标签: c

即使长度大于4,

theMessageMaxLength仍然给我4的值。为什么会发生这种情况,我该如何解决?它的类型为size_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';

3 个答案:

答案 0 :(得分:8)

您似乎对sizeof() strlen()感到困惑。

sizeof(theMessage)只会给你一个char*的大小,这是一个指针 - (在你的情况下是4个字节)。如果您想要字符串的长度,则需要使用strlen(theMessage)代替。

place_value(task, llist, theMessage, strlen(theMessage)); 

答案 1 :(得分:1)

sizeof(theMessage)sizeof(char *)字面上相同。也许你对下面的情况感到困惑:

char theMessage[1024];

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

printf("sizeof(theMessage): %zd\n", sizeof(theMessage));

如果为theMessage分配内存,则应提供其大小。

编辑:作为一个副节点,您可能对strndup感兴趣,它会自动分配内存并在末尾向目标字符串附加一个NULL字符。但是,当然,你必须要小心,不要忘记释放它。

答案 2 :(得分:0)

您正在测量指针的大小,即4(在32位平台上)。

相关问题