我有一个关于将 fgets() 与 char* 字符串一起使用的简单问题。
....
char *temp;
FILE fp=fopen("test.txt", "r");
fgets(temp, 500, fp);
printf("%s", temp);
....
这段代码运行得不好。
但我修改后char *temp
to char temp[100];
,代码按照我的预期运行良好。
这两者有什么区别?
当我谷歌搜索时,有人说内存必须分配给char *
使用 malloc()...
但我无法理解。
char *temp 只是一个指针。一开始它不指向任何东西,可能它有一个随机值。
fgets() 从 fp 读取 500 个字节到临时指针指向的内存地址!因此,它可以覆盖东西,它可以产生分段错误,并且只有极低的机会才能正常工作。
但 char temp[500] 是一个 500 字节长的数组。这意味着编译器在进程开始时(或在调用函数时)进行分配。因此,这 500 字节将是可用的 500 字节,但它是有代价的:你不能重新分配、调整大小、释放等等。
谷歌对你的要求是:
char *temp = (char*)malloc(500);
And a
free(temp);
之后你就不再需要这个了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)