#include<cstdio>
#include<stdlib.h>
#include<iostream>
int main()
{
char s[] = "asdfasdf";
FILE *d = fopen("a.txt", "r");
if (d == NULL){
printf("no\n");
exit(0);
}
char *m;//改成m[10]才可以,原来的写法为什么不对?
fgets(m,5, d);
printf("%s\n", m);
fclose(d);
}
3 回答
已采纳
onemoo
TA贡献883条经验 获得超454个赞
fgets 函数会把读到的字符串存入第一个参数所指的内存中。然而 char *m 这个 m 只是个 char 指针,且 m 没有被赋予初值,那么 m 的初值是不确定的——也就是说 m 指向一块不确定的内存,那一般不是你能合法、安全使用的内存。
fgets 的参数是指针,但它要操作的是指针所指的内存,所以注意不要仅仅传入一个指针,而是要确保指针所指的内存是你能合法使用的。
将 m 声明为 char m[10],这样 m 就是一个能容纳10个字符的数组。数组名在作右值使用时(传参时)会自动转为指向数组首元素的指针,所以你传入 fgets 的 m 就是一个指向 m 数组的指针。这样就可以让 fgets 正常工作了。
Xyino_Snake
TA贡献31条经验 获得超22个赞
这是一个中规中矩的C语言问题。我知道这是C++。char * 只是一个指针。你并不能直接往这个指针里写内容。除非它指向一块已经分配好的内存。比方说指向一个全局的char数组缓冲区。或者,你也可以用new来动态分配一块内存。可以写成char * m = new char[256];然后再传m给fgets就行了。当然,new []分配的内存必须用delete []手动释放掉。
- 3 回答
- 1 关注
- 1559 浏览
添加回答
举报
0/150
提交
取消