c - 将字符串传递给 C 中的函数

标签 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;
}

我得到以下输出:

#��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 数组中并返回它的地址,这由 mainprintf 函数的第二个参数获取。
但是我发现这只有在我将 printf 函数直接用于同一个 lookLine 函数时才有效...

拜托,有人能告诉我这里到底发生了什么吗?

最佳答案

这是因为您要从 read 函数返回一个指向本地数组的指针。

请记住,局部变量存储在堆栈中,包括数组。当函数返回时,编译器会回收堆栈空间以供其他函数调用使用。所以你有一个指向另一个函数内存的指针。

关于c - 将字符串传递给 C 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16751249/

相关文章:

c - 我想澄清以下答案是否正确?

您可以使用 C 将函数的内存位置存储到 RAM 中吗?

arrays - VBA创建一个包含公式的数组

python - 为什么 split() 在同一字符串上返回的元素多于 split ("")?

C++ 将双参数解析为字符串?

c - C 中 char[] 和字符串的区别

c - 为什么我从以下 C 代码中得到段错误?

java - 二维数组空指针异常错误

java - 如何共享使用 ImageView 功能的数组中的图像?

c# - 如何通过格式将字符串转换为日期时间?