Dan*_*dam 0 c arrays string fgets memory-address
我有以下代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
#??x?
Run Code Online (Sandbox Code Playgroud)
不太好.我打算打印出名为"suma.c"的文件的第一行.它应该打印出以下内容:
#include <stdio.h>
Run Code Online (Sandbox Code Playgroud)
不过,如果我将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;
}
Run Code Online (Sandbox Code Playgroud)
我现在得到的输出是正确的:
#include <stdio.h>
Run Code Online (Sandbox Code Playgroud)
我的理由是:通过使用fgets我保存p数组中第一行"name.c"的字符串,然后返回其地址,该地址由printf函数in 的第二个参数获取main.
但我发现只有当我将printf函数直接用于同一个lookLine函数时,这才有效...
拜托,有人能告诉我这里到底发生了什么吗?
这是因为你从read函数返回一个指向本地数组的指针.
请记住,局部变量存储在堆栈中,包括数组.当函数返回时,编译器将回收堆栈空间以供其他函数调用使用.所以你有一个指针指向另一个函数的内存.
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |