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';
答案 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位平台上)。