私はこの関数を書きました:
char* input(char* buffer, FILE* fp)
{
char* result=fgets(buffer,LMAX,fp);
if(result!=NULL)
{
const unsigned int length=strlen(buffer);
if(buffer[length-1]=='\n')
buffer[length-1]='\0';
}
return result;
}
fp が stdin と等しい場合、テキスト行を入力するだけです。
私はそれを何度も使用しましたが、うまくいきます。
fp が FILE ポインターの場合にのみ fgets の結果を取得するため、ストリームが入力操作に適していない場合は、結果が NULL でないことを確認する必要があります。
問題は、次のように使用する場合です。
char buffer[LMAX]; // LMAX = 100, defined constant
input(buffer,stdin);
puts(buffer);
入力が "#dest :a" のような場合、puts は "#dest" を出力し、残りの文字列を切り取ります。大きな問題は、この関数が機能していて、1 時間前 (同じだった) に取り込んだ場合です。 「#dest :a」のような文字列を入力すると、puts は「#dest :a」と出力されました。また、何も変更されていません。また、デバッグを試みて、次のように記述した場合:
char* input(char* buffer, FILE* fp)
{
char* result=fgets(buffer,LMAX,fp);
puts(buffer); //prints always "#dest :a"
if(result!=NULL)
{
const unsigned int length=strlen(buffer);
if(buffer[length-1]=='\n')
buffer[length-1]='\0';
}
return result;
}
問題は、関数内で "#dest :a" が出力されることです。
この関数は機能する場合と機能しない場合があります。私は KO です。非決定論的な動作に耐えられません。この問題 (およびおそらくバグ) の原因は何ですか?