次のCコードでは、1文字しか入力しないと、最後のprintfは "10,10"と表示されます。代わりに "10,8"が印刷されます。私が10バイトをmallocすると、なぜinput
は8バイトしかありませんか?Cでのmalloc()の振る舞い
char* input;
unsigned long inputLen = 10;
input = (char*) malloc(10 * sizeof(char));
printf("Input: ");
getline(&input,&inputLen,stdin);
printf("%lu,%d",inputLen,sizeof(input));
mallocをキャストするのは悪いです - http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc –
'sizeof(char)' - これは常に1である –
'getline()'関数は、返された文字数を返します。あなたは入力がどれくらいの間であるかを知るために何かを使うのではなく、それを使うべきです。 'strlen()'を使うと、通常は同じ答えが得られますが、ユーザは入力ストリーム(Control- @通常)にヌルバイトを入れてから 'strlen()'を使うと短い答えが得られます。ユーザーが9文字以上(改行を含む)を入力すると、 'inputLen'の値はもっと大きくなることに注意してください。また、 'getline()'の第2引数は 'size_t *'でなければなりません。これは 'unsigned long'と必ずしも同じではありません。 –