为什么这段代码会报错,求高人指点,很短的代码
int main(){
FILE*fp = ("D:\a.txt", "r+");
if (!fp)
return 0;
char ch;
ch=fgetc(fp);
char*ru;
ru = ch;
printf("%s", ru);
}
为什么这段代码会报错,求高人指点 1.类型不匹配
ch是char型
ru~ru 都是char*
改成
ru = &ch;
2.改成上面还是有点问题,看起来怪怪的,说出你程序要完成的任务。
风扫地 发表于 2019-4-26 19:05
1.类型不匹配
ch是char型
ru~ru 都是char*
我想把一个txt里的数据一个个的通过fgetc,存到指针数组的第一个值里。
本帖最后由 风扫地 于 2019-4-26 20:26 编辑
liu306178205 发表于 2019-4-26 20:09
我想把一个txt里的数据一个个的通过fgetc,存到指针数组的第一个值里。
存到字符数组里面就可以了,不需要存储到字符指针数组里面去。
int main()
{
FILE*fp = fopen("D:\a.txt", "r+"); //要调用函数才能打开文件
char ru = {0,};
int i = 0;
int ch;
if (!fp)
return 0;
while((ch=fgetc(fp) )!=EOF) // fgetc的返回值是int,当返回-1时表示达到文件末尾,若返回不为-1,则取低字节(小端存储时)就是读到的字符。
{
ru = (char)(ch);
i++;
if(i==98) //缓存数组只有100个字节长度,还要至少含有一个\0,所以最多存99个数就要强制跳出
{
break;
}
}
fclose(fp);//文件用完了要关闭
printf("%s", ru);
}
本帖最后由 wwhywhy 于 2019-4-26 20:47 编辑
问题1.
char*ru;变量ru只被定义但是没有被清空。其中是有随机的值的。
执行下面语句时:
printf("%s", ru);
表示的结果是显示一个字符串。
C里面字符串的结束标志是‘、0’,因为没有碰到结束符,所以这个显示的结果就是是怪异的(只有第一个是对的)。
应该在定义数组变量后,一定要初始化一下:
memset(ru, 0, sizeof(ru));
问题2:
文件的操作错误
文件打开函数:file* fp = fopen();
打开还要判断是否成功,比如文件不存在之类的:
if (!fp) return -1;
文件的关闭函数:fclose(fp);
文件的操作函数:fgetc(),fread()等。
风扫地 发表于 2019-4-26 20:24
存到字符数组里面就可以了,不需要存储到字符指针数组里面去。
int main()
{
ru = (char)(ch);是什么意思啊 本帖最后由 wwhywhy 于 2019-4-26 21:02 编辑
char ru = {0,};
int ch;
这两个的类型不同啊!
一个是char,一个是int,互相赋值的时候,当然要转换了。
应该是:
不知道为什么,直接输入中括号,版面显示不出来。只好用图片了。 wwhywhy 发表于 2019-4-26 20:49
char ru = {0,};
int ch;
这两个的类型不同啊!
FILE*fp = fopen("D:\a.txt", "r+");
if (!fp)
return 0;
char*ch = { 0 };
fgets(ch,100, fp);
printf("%s\n", ch);
老哥再帮我看看这个,只弹框没结果
本帖最后由 wwhywhy 于 2019-4-26 21:14 编辑
fgets(ch,100, fp);
这个分号是双字节的。应该是单字节的。你敲错了。
数组ch,不应该是指针数组。只要定义成数组就成了。
把ch前的*去掉
文件操作,在win下,应该是:
FILE*fp = fopen("D:\\a.txt", "r+");
要不打不开的 wwhywhy 发表于 2019-4-26 21:09
fgets(ch,100, fp);
这个分号是双字节的。应该是单字节的。你敲错了。
fgets(ch; 100; fp); 这个意思吗 你写的是:
fgets(ch,100, fp);
应该是:fgets(ch,100, fp);
风扫地 发表于 2019-4-26 20:24
存到字符数组里面就可以了,不需要存储到字符指针数组里面去。
int main()
{
谢谢你 wwhywhy 发表于 2019-4-26 21:09
fgets(ch,100, fp);
这个分号是双字节的。应该是单字节的。你敲错了。
谢谢你,解决了 其实文件操作有很多的细节要注意。自己多爬爬网,找些例子和函数的定义多练习就好! liu306178205 发表于 2019-4-26 20:45
ru = (char)(ch);是什么意思啊
类型强制转换,就是取读出来的字符。
页:
[1]