2013-05-01 27 views
9

通常、strlen()はヌルターミネータを文字列の末尾に数えません。しかし、以下のコードは文字列countをヌルターミネータで表示します。誰も私の理由を説明することはできますか?おかげstrlen()はヌルターミネータの文字列countを返します。

char str2[100]; 
printf("\nEnter a string: "); 
fgets (str2, sizeof(str2), stdin); 
printf("\n%d",strlen(str2)); 
+11

これはおそらく、数えるの '\ N 'ではなく' \ 0 ' –

+0

だから何の文字列あなたが入力した、その結果は何でしたか? –

+0

[fgets()の最後に改行が追加される可能性があります](http://stackoverflow.com/questions/13443793/fgets-adds-newline-at-the-end) –

答えて

34

私は前のfgetsプロンプトを想定していますがnewline文字を拾いました。あなたはappleに入れ

:たとえば

内部的には、文字列はapple\n\0として保存されました。

strlenはその後\nに遭遇するまでapple + '\n'

+1

良い説明。ようこそ! –

+1

ありがとう@luserdroog :) –

+0

@hmdbあなたは答えとしてこれを受け入れることができますか? – Gewure

0

fgets()ため6読み取り返さ。

anshulと入力すると、str2にはanshul\n\0が含まれます。

strlen()は、NULL( '\ 0')文字が見つかるまでstrlen()が検索されるため、7を返します。

2

ここでは、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)); 
} 
3

fgets()機能は、入力を受け付けしたがって、それをパラメータとしてstrlen()に渡すと、追加の\n文字を扱うために、文字列内の元の文字数より1つ多くの文字列が与えられます。

オリジナルの文字数を入力したい場合や\nを追加したくない場合は、改行文字をコピーしないようにgets()関数を使用してください。また、文字列を引数として渡すだけで、 gets()のデフォルトストリームとしてストリーム(stdin)を渡す必要はありません。stdinです。

char str2[100]; 
printf("\nEnter a string: "); 
gets(str2); 
printf("\n%d",strlen(str2)); 
0

取得(s)はあなたがstring.But、fgetsのを(入力が終了した後にEnterキーを打ったときに「\ n」が含まれていません)ファイルからの読み込み中に「\ n」を含んでいます。

(使用:男性のfgets)のmanページあたりとしてLinux端末で、

のfgets()は、ストリームからsize文字未満で、ほとんど1で読み込み、バッファにそれらを保存するには、sが指します。 EOFまたは改行 の後に読み込みが停止します。改行が読み取られた場合、改行はバッファに格納されます。終了nullバイト( '\ 0')は、バッファ内の最後の文字の後に格納されます。

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)); 
関連する問題