2011-12-16 99 views
1

theMessageMaxLength即使长度大于4,也会给我一个值4。为什么发生这种情况,我该如何解决?这是size_t型的,我没有它宣称的任何地方,而这仅仅是传递在这样一个值: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'; 

回答

8

它看起来像你与strlen()混淆sizeof()

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

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

谢谢:) ...知道了! – BigBug 2011-12-16 04:01:33

0

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

1

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

char theMessage[1024]; 

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

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

如果您theMessage分配内存,那么你就应该提供它的大小。

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