2011-12-16 75 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字符。但是,當然,你必須小心,不要忘記釋放它。