次のコードがあります。
#include <stdio.h>
char * lookLine (FILE *fichero)
{
char p[25];
fgets (p, sizeof (p), fichero);
return p;
}
int main (void) {
printf ("%s\n", lookLine (fopen ("suma.c", "r")));
return 0;
}
そして、次の出力が得られます。
#��x�
よくない。私の意図は、「suma.c」という名前のファイルの最初の行を出力することです。次のように出力されます。
#include <stdio.h>
それにもかかわらず、文字列の内容をp
同じlookFile
関数に出力すると、問題なく実行されます。
#include <stdio.h>
void lookLine (FILE * fichero)
{
char p[25];
fgets (p, sizeof (p), fichero);
printf ("%s\n", p);
}
int main (void) {
lookLine (fopen ("suma.c", "r"));
return 0;
}
そして、私が今得た出力は正しいものです:
#include <stdio.h>
私の推論は次のとおりです: を使用してfgets
、「name.c」の最初の行の文字列をp
配列に保存し、そのアドレスを返します。これは、printf
関数 inの 2 番目の引数によって取得されmain
ます。しかし、これは関数を同じ関数に直接
使用した場合にのみ機能することがわかりました...printf
lookLine
ここで実際に何が起こっているのか誰か教えてください。