0

単純な構成ファイルからパスを読み取り、C言語を使用してchar配列に格納する作業を行っています。私はそれを行う方法を思いついたが、パスの端に空白が付いていないパスを取得するのに問題があります。これを行うためのより良い方法を見つけるのを手伝ってください。

char* webroot(){
 FILE *in = fopen("conf", "rt");
 char buff[1000];
 fgets(buff, 1000, in);
 printf("first line of \"conf\": %s\n", buff);
 fclose(in);

 return buff;
}
4

3 に答える 3

2

fgets()これは、末尾の一連の空白文字ではなく、返されるバッファーに含まれる改行文字です。 を null ターミネーターに置き換えます\n

/* fgets() will not read the new-line if
   there is not sufficient space in the buffer
   so ensure it is present. */
char* nl_ptr = strrchr(buff, '\n');
if (nl_ptr) *nl_ptr = '\0';

で行を折り返しているように見えるため、一連の空白文字があるように見える場合がありますが、stdoutこれは で読み取られる改行文字が存在するためfgets()です。

文字列を印刷するとき、文字列[]の内容をより明確にするために、文字列を内部に配置すると便利です。

printf("first line of \"conf\": [%s]\n", buff);

これにより、によって取得された改行文字の存在がfgets()より見やすくなります。

webroot()関数がローカル変数のアドレスを返すことに注意してくださいbuff。これはエラーであり、未定義の動作です。strdup()if available またはmalloc()and otherを使用して、新しいバッファを動的に割り当てる必要がありstrcpy()ます。

return strdup(buff);

の呼び出し元は戻り値を受け取るwebroot()必要があります。free()障害NULLが発生した場合に返される手配。

于 2012-11-02T08:31:59.667 に答える