gpt4 book ai didi

c - 将 fgets() 与 char* 类型一起使用

转载 作者:太空狗 更新时间:2023-10-29 15:17:52 24 4
gpt4 key购买 nike

我有一个关于将 fgets() 与 char* 字符串一起使用的简单问题。

....
char *temp;
FILE fp=fopen("test.txt", "r");

fgets(temp, 500, fp);
printf("%s", temp);
....

此代码无法正常工作。

但是在我将 char *temp 修改为 char temp[100]; 之后,代码运行良好,符合我的预期。

这两者有什么区别?

当我用 google 搜索时,有人说必须使用 malloc() 将内存分配给 char *...

但我听不懂。

最佳答案

char *temp 只是一个指针。一开始它没有指向任何东西,可能它有一个随机值。

fgets() 从 fp 读取 500 个字节到内存地址,这个临时指针指向!所以,它可以覆盖东西,它可以产生段错误,并且只有非常低的机会才能正常工作。

但是 char temp[500] 是一个 500 字节长的数组。这意味着,编译器在您的进程开始时(或在调用您的函数时)进行分配。因此,这 500 字节将是可用的 500 字节,但它是有代价的:您不能重新分配、调整大小、释放等等。

谷歌想从你这里得到的是:

char *temp = (char*)malloc(500);

还有一个

free(temp);

在你不再需要它之后。

关于c - 将 fgets() 与 char* 类型一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20198180/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com