2011-12-16 16 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に設定されていると仮定していますが、私のメッセージが大きければ大きなものに設定してはいけませんか?私はどのようにしてサイズを増やすことができますか?その後、

、に渡されている関数内でこのように使用:あなたはstrlen()sizeof()が混乱しているように見えます

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

答えて

8

sizeof(theMessage)は、char*のサイズ(あなたの場合は4バイト)だけです。文字列の長さが必要な場合は、代わりにstrlen(theMessage)を使用する必要があります。

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

ありがとう:) ...それを得ました! – BigBug

0

ポインタのサイズを測定しています(32ビットプラットフォームでは4)。

1

sizeof(theMessage)は、sizeof(char *)と文字通り同じです。あなたがtheMessageのためにメモリを割り当てる場合、あなたはそのサイズを提供する必要があります

char theMessage[1024]; 

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

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

:おそらく、あなたは、以下のような状況と混同されました。

EDIT:サイドノードとして、strndupが自動的にメモリを割り当て、最後にNULL文字を宛先文字列に追加します。もちろん、あなたは注意を払わなければならず、自由にすることを忘れないでください。

関連する問題