通常、strlen()はヌルターミネータを文字列の末尾に数えません。しかし、以下のコードは文字列countをヌルターミネータで表示します。誰も私の理由を説明することはできますか?おかげstrlen()はヌルターミネータの文字列countを返します。
char str2[100];
printf("\nEnter a string: ");
fgets (str2, sizeof(str2), stdin);
printf("\n%d",strlen(str2));
通常、strlen()はヌルターミネータを文字列の末尾に数えません。しかし、以下のコードは文字列countをヌルターミネータで表示します。誰も私の理由を説明することはできますか?おかげstrlen()はヌルターミネータの文字列countを返します。
char str2[100];
printf("\nEnter a string: ");
fgets (str2, sizeof(str2), stdin);
printf("\n%d",strlen(str2));
私は前のfgets
プロンプトを想定していますがnewline
文字を拾いました。あなたはapple
に入れ
:たとえば
。
内部的には、文字列はapple\n\0
として保存されました。
strlen
はその後\n
に遭遇するまでapple
+ '\n'
fgets()
ため6
読み取り返さ。
anshul
と入力すると、str2
にはanshul\n\0
が含まれます。
strlen()
は、NULL( '\ 0')文字が見つかるまでstrlen()
が検索されるため、7を返します。
ここでは、fgets()関数を使用して入力を受け取りました。 fgets()関数で入力を取得すると、追加の改行文字( '\ n')が追加されます。あなたの入力が "こんにちは"であるとします。この刺し込みを入力した後、Enterキーを押すと、文字列に改行文字が追加されます。したがって、strlen()はヌルターミネータを数えます。しかし、scanf()関数を使って入力した場合、ENTERを押すと改行文字( '\ n')は追加されません。文字列に含まれる文字の正確な数が表示されます。私の説明を見るために、次のコードを実行します。改行文字(stdin
を使用した場合、キー入力)に遭遇して、改行文字\n
が機能によって有効な文字とみなされ、あなたのstr2
にコピーされた文字列に含まれているとき。
#include<stdio.h>
#include<string.h>
void main()
{
char str2[100];
printf("\nEnter a string: ");
scanf("%s",str2);
//fgets (str2, sizeof(str2), stdin);
printf("\n%d",strlen(str2));
}
fgets()
機能は、入力を受け付けしたがって、それをパラメータとしてstrlen()
に渡すと、追加の\n
文字を扱うために、文字列内の元の文字数より1つ多くの文字列が与えられます。
オリジナルの文字数を入力したい場合や\n
を追加したくない場合は、改行文字をコピーしないようにgets()
関数を使用してください。また、文字列を引数として渡すだけで、 gets()
のデフォルトストリームとしてストリーム(stdin
)を渡す必要はありません。stdin
です。
char str2[100];
printf("\nEnter a string: ");
gets(str2);
printf("\n%d",strlen(str2));
取得(s)はあなたがstring.But、fgetsのを(入力が終了した後にEnterキーを打ったときに「\ n」が含まれていません)ファイルからの読み込み中に「\ n」を含んでいます。
(使用:男性のfgets)のmanページあたりとしてLinux端末で、
のfgets()は、ストリームからsize文字未満で、ほとんど1で読み込み、バッファにそれらを保存するには、sが指します。 EOFまたは改行 の後に読み込みが停止します。改行が読み取られた場合、改行はバッファに格納されます。終了nullバイト( '\ 0')は、バッファ内の最後の文字の後に格納されます。
fgets()は改行(\ n)文字を読み込んで配列に格納します。
fgets()を呼び出すたびに、私は常にstrcspn()を使って配列/ポインタを検索し、改行文字を見つけてヌル文字に置き換えます。
char str2[100];
printf("\nEnter a string: ");
fgets (str2, sizeof(str2), stdin);
//new line of code to replace '\n' with '\0'
str2[strcspn(str2, "\n")] = '\0';
printf("\n%d",strlen(str2));
これはおそらく、数えるの '\ N 'ではなく' \ 0 ' –
だから何の文字列あなたが入力した、その結果は何でしたか? –
[fgets()の最後に改行が追加される可能性があります](http://stackoverflow.com/questions/13443793/fgets-adds-newline-at-the-end) –