2017-01-28 2 views
1

に入力を渡すのにstrncpy(justLine, buf, charsToWrite)を使用しています。今私はこのことから最初の言葉を得たいと思います。fgetsからの最初の単語を取得

私はこのような何かを管理:

int spaceIndex = strchr(input, ' '); 
char firstWord[spaceIndex]; 
strncpy(firstWord, input, spaceIndex-1); 
firstWord[spaceIndex] = '\0'; 

はUnfortunellyこれは正しく動作していません。あなたはなにか考えはありますか?

また、strtokを使用してみましたが、inputで台無しです。あなたのコードは、ほぼ正しい、あなただけの'\0'ターミネータは、あなたがそれを割り当て、あなたがstrncpyを呼び出すとき文字列の一部であることを覚えていませんされて

+3

'strchr'の戻り値の型は' int'ではなく 'char *'です。 – BLUEPIXY

+2

正常に動作していないとはどういう意味ですか? – Lutopia

+1

'strcspn'を以下のように使います:' size_t len = strcspn(input、 ""); char firstWord [len + 1]; strncpy(firstWord、input、len); firstWord [len] = '\ 0'; ' – BLUEPIXY

答えて

-1

あなたはサイズspaceIndex+1.文字列を割り当てる必要があります。

  1. firstWordchar 1以上を追加します:あなたは2つの修正必要

    char firstWord[spaceIndex + 1];

  2. strncpyへの呼び出しには、余分なバイトの点に注意してください。

    strncpy(firstWord, input, spaceIndex+1);

    私は実際にparamenterとしてバッファサイズを使用することをお勧め:

    strncpy(firstWord, input, sizeof(firstWord));

あなたはそれを正しく使用しているが、この機能は本当にトリッキーで、strncpy's documentationをお読みください。

関連する問題