liu306178205 发表于 2019-4-26 18:54:07

为什么这段代码会报错,求高人指点,很短的代码

int main()
{
        FILE*fp = ("D:\a.txt", "r+");
        if (!fp)
                return 0;
        char ch;
        ch=fgetc(fp);
        char*ru;
        ru = ch;
        printf("%s", ru);
}

为什么这段代码会报错,求高人指点

风扫地 发表于 2019-4-26 19:05:15

1.类型不匹配
ch是char型
ru~ru 都是char*

改成
      ru = &ch;

2.改成上面还是有点问题,看起来怪怪的,说出你程序要完成的任务。

liu306178205 发表于 2019-4-26 20:09:09

风扫地 发表于 2019-4-26 19:05
1.类型不匹配
ch是char型
ru~ru 都是char*


我想把一个txt里的数据一个个的通过fgetc,存到指针数组的第一个值里。

风扫地 发表于 2019-4-26 20:24:45

本帖最后由 风扫地 于 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:37:42

本帖最后由 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()等。

liu306178205 发表于 2019-4-26 20:45:44

风扫地 发表于 2019-4-26 20:24
存到字符数组里面就可以了,不需要存储到字符指针数组里面去。
int main()
{


ru = (char)(ch);是什么意思啊

wwhywhy 发表于 2019-4-26 20:49:31

本帖最后由 wwhywhy 于 2019-4-26 21:02 编辑

char ru = {0,};
int ch;
这两个的类型不同啊!
一个是char,一个是int,互相赋值的时候,当然要转换了。

应该是:


不知道为什么,直接输入中括号,版面显示不出来。只好用图片了。

liu306178205 发表于 2019-4-26 21:02:08

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:09:45

本帖最后由 wwhywhy 于 2019-4-26 21:14 编辑

fgets(ch,100, fp);
这个分号是双字节的。应该是单字节的。你敲错了。

数组ch,不应该是指针数组。只要定义成数组就成了。
把ch前的*去掉

文件操作,在win下,应该是:
FILE*fp = fopen("D:\\a.txt", "r+");
要不打不开的

liu306178205 发表于 2019-4-26 21:16:02

wwhywhy 发表于 2019-4-26 21:09
fgets(ch,100, fp);
这个分号是双字节的。应该是单字节的。你敲错了。



fgets(ch; 100; fp); 这个意思吗

wwhywhy 发表于 2019-4-26 21:18:30

你写的是:
fgets(ch,100, fp);
应该是:fgets(ch,100, fp);

liu306178205 发表于 2019-4-26 21:25:43

风扫地 发表于 2019-4-26 20:24
存到字符数组里面就可以了,不需要存储到字符指针数组里面去。
int main()
{


谢谢你

liu306178205 发表于 2019-4-26 21:26:15

wwhywhy 发表于 2019-4-26 21:09
fgets(ch,100, fp);
这个分号是双字节的。应该是单字节的。你敲错了。



谢谢你,解决了

wwhywhy 发表于 2019-4-26 21:30:37

其实文件操作有很多的细节要注意。自己多爬爬网,找些例子和函数的定义多练习就好!

风扫地 发表于 2019-4-27 09:07:54

liu306178205 发表于 2019-4-26 20:45
ru = (char)(ch);是什么意思啊

类型强制转换,就是取读出来的字符。
页: [1]
查看完整版本: 为什么这段代码会报错,求高人指点,很短的代码