fgets
とstrcat
を使用しているときに問題が発生しました(をscanf
に置き換えようとしましたがプログラムが正常に動作しました)。 strcat
が機能していないようです。fgetsとstrcatの使用時の問題
char name[256];
char text[256];
fgets(name,250,stdin);
strcat(name,".txt");
printf("%s\n",name);
出力は、(別々の行に)ある:
d
.txt
fgets
とstrcat
を使用しているときに問題が発生しました(をscanf
に置き換えようとしましたがプログラムが正常に動作しました)。 strcat
が機能していないようです。fgetsとstrcatの使用時の問題
char name[256];
char text[256];
fgets(name,250,stdin);
strcat(name,".txt");
printf("%s\n",name);
出力は、(別々の行に)ある:
d
.txt
あなたが入力から改行を削除しなければなりません。このように:
fgets(name, 250, stdin);
char *p = strchr(name, '\n');
if (p)
*p = '\0';
strcat(name, ".txt");
明らかに、いくつかのエラーチェックを追加したいと思いますが、これはアイデアを示しています。
これは改行が 'name'にあると仮定しています。おそらく 'strchr'を使用します。 –
@FiddlingBits良い点。編集されました。 –
fgets
機能でも'\n'
が消費されるため、そのように表示されます。あなたは簡単にするために代わりにscanf
を使用することができます。
int main() {
char name[256];
char text[256];
scanf("%250s",name);
strcat(name,".txt");
printf("%s\n",name);
}
注: 'scanf("%s ")'は次のスペースまで読み込みます。http://stackoverflow.com/questions/1247989/how-do-you-allow-spaces-to-be-entered-using-詳細についてはscanfを参照してください。 –
@RolandIlligそうですが、例ではファイル名 "d.txt"のように表示されているため、スペースをキャッチすることはできず、最後の "\ n"を削除するための余分な機能は必要ありません。しかし、コードの意図が本当にスペース、タブを含む穴の文字列を取得するためのものであれば...あなたは正しい – Pooya
めったに使われない機能strcspn
を使用して、これは簡単で、エラーが発生しやすい次のようになります。
if (fgets(name, 250, stdin) != NULL) {
strcpy(name + strcspn(name, "\n"), ".txt");
...
}
strcspn
機能がない文字の数をカウント\n
; strcspnのcはを補完してを意味します。 したがって、名前に改行が含まれているかどうかにかかわらず、.txt
は常に正しい位置に追加されます。
'fgets'の後に新しい行をnameから削除する必要があります。 –
[別の質問への私の答え](http://stackoverflow.com/a/36341266/434551)を見てください。質問は異なりますが、ソリューションはまったく同じです。 –
'strcat'が機能しなかった場合、出力に' .txt'が表示されません –