我有以下代码:
#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
数组中并返回它的地址,这由 main
中 printf
函数的第二个参数获取。
但是我发现这只有在我将 printf
函数直接用于同一个 lookLine
函数时才有效...
拜托,有人能告诉我这里到底发生了什么吗?
最佳答案
这是因为您要从 read
函数返回一个指向本地数组的指针。
请记住,局部变量存储在堆栈中,包括数组。当函数返回时,编译器会回收堆栈空间以供其他函数调用使用。所以你有一个指向另一个函数内存的指针。
关于c - 将字符串传递给 C 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16751249/