最大50文字のユーザー入力文字列を取得する必要があります。したがって、私はMAX_STRING_LENGTH
変数を50で定義し、その文字列は51文字で初期化されています。ただし、入力が48文字を超えるたびに、最後の2文字から文字列が切り捨てられます。これは学校の運動であり、私は<string.h>
を使うことができません。文字列が2文字に満たない文字列
#include <stdio.h>
#define MAX_STRING_LENGTH 50
int main(void)
{
int j=0;
char stringInput[MAX_STRING_LENGTH+1]; //string initialized.
printf("Please enter a valid string\n");
fgets(stringInput,MAX_STRING_LENGTH,stdin); //string input.
for(j=0;stringInput[j]!='\0';j++);
if(j<MAX_STRING_LENGTH+1)
{
j=j-1;
stringInput[j]='\0'; //remove newline if it exists
}
//...
return 0;
}
なぜ文字列が2文字失われているのかわかりません。
fgets
を使用すると常に改行(\n
)が作成されていることを前提としています(50文字の完全な文字列が入力されても)常に1文字が失われているため、文字列の)。しかし、私は他のキャラクターがどのように失われたのか分かりません。
フィードバックに感謝いたします。あなたは高々MAX_STRING_LENGTH - 1
文字が配列stringInput
に読まれることを指定し、この呼び出しで
「fgets」のドキュメントをよくお読みください。それは常にヌルターミネータを格納するので、渡すサイズよりも1文字少ないものを読み込むので、50文字を読み取ることはできません(49文字しか読み込まれず、ヌルを格納するため)。あなたは、もし存在するならば、改行を削除すると主張しますが、最後の文字が改行でない場合でも常にそれを無条件に削除します。なぜあなたは 'strlen'を手で再実装しましたか? –
49文字を入力すると、47が得られますか?または46? – KyleKW
* 50の*文字配列*を51の値で初期化するにはどうすればよいですか? –