免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: tide_lll
打印 上一主题 下一主题

将文本文件中每一行的所有字符读为数组的一个元素??(初学者) [复制链接]

论坛徽章:
0
11 [报告]
发表于 2004-02-16 09:39 |只看该作者

将文本文件中每一行的所有字符读为数组的一个元素??(初学者)

char str[1025];
FILE * fp;

fp = fopen(fileName, "r";
while(fgets(str, 1024, fp) != NULL)
{
        // do what you want ...
}

论坛徽章:
0
12 [报告]
发表于 2004-02-16 18:47 |只看该作者

将文本文件中每一行的所有字符读为数组的一个元素??(初学者)

mindit的程序有些问题,我改一下:

  1. #include <stdio.h>;
  2. main()
  3. {
  4.         char str[20][100];//20个元素,每个元素是100字节的字符数组
  5.         FILE * fp;
  6.         int i,j;
  7.        
  8.         fp = fopen("abc", "r");
  9.         i=0;
  10.         while(fgets(*(str+i), 100, fp) != NULL)
  11.         {
  12.                 // do what you want ...
  13.                 i++;
  14.         }
  15. //验证一下正确性
  16.         for(j=0;j<i;j++)
  17.                 printf("%d[%s]\n",j,str[j]);
  18.         fclose(fp);
  19.         return(0);
  20. }
复制代码

论坛徽章:
0
13 [报告]
发表于 2004-02-16 21:09 |只看该作者

将文本文件中每一行的所有字符读为数组的一个元素??(初学者)

大家看这样行不行?显示segment error,怎么回事?
#include <stdio.h>;
main()
{
   char *str;//20个元素,每个元素是100字节的字符数组
   FILE * fp;
   //int i,j;
   
   fp = fopen("abc", "r");
   i=0;
   while(fgets(str, 100, fp) != NULL)
   {
           // do what you want ...
      i++;
   }
//验证一下正确性
  // for(j=0;j<i;j++)
      printf("%d[%s]\n",j,str);
   fclose(fp);
   return(0);
}

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
14 [报告]
发表于 2004-02-16 21:48 |只看该作者

将文本文件中每一行的所有字符读为数组的一个元素??(初学者)

你没有给str分配空间,
当然要出错了。
str是野指针了。

论坛徽章:
0
15 [报告]
发表于 2004-02-17 09:27 |只看该作者

将文本文件中每一行的所有字符读为数组的一个元素??(初学者)

如lenovo所说。
另外字符串数组肯定是二维数组,你定义成char *str相当于用一维数组来处理肯定是不行的,我写的注释中说20个元素,每个元素是100字节的字符数组不是白写的,是有道理的。所以要用我的程序。

论坛徽章:
0
16 [报告]
发表于 2004-02-17 11:08 |只看该作者

将文本文件中每一行的所有字符读为数组的一个元素??(初学者)

存储的元素是字符串,如果不用二位数组的话,也可以用指针树组

论坛徽章:
0
17 [报告]
发表于 2004-02-17 11:25 |只看该作者

将文本文件中每一行的所有字符读为数组的一个元素??(初学者)

用指针数组就涉及到一个分配空间的问题,所以直接在定义时分配好空间更好。

论坛徽章:
0
18 [报告]
发表于 2004-02-17 15:26 |只看该作者

将文本文件中每一行的所有字符读为数组的一个元素??(初学者)

现在问题出现,fgets()每次读到新行的时候,把新行符也作为读入串的一部分,结果串用null结尾,

也就是上面的例子其实这样了,
aaaaaaa
/n
bbbbb
/n
cccccccc
/n
dddd
/n
null
这样就每个多了一个字符。


另外我用命令strcpy(str1,str2,n)时,总说有问题。

论坛徽章:
0
19 [报告]
发表于 2004-02-17 15:35 |只看该作者

将文本文件中每一行的所有字符读为数组的一个元素??(初学者)

不错,fgets会多读入一个回车,去掉回车的方法是str[j][strlen(str[j])-1]=0,意思就是把str[j]这个字符串的最后一位(本来是回车)置为结束符。
strcpy只有两个参数,你传入三个参数当然是错了。

论坛徽章:
0
20 [报告]
发表于 2004-02-17 18:16 |只看该作者

将文本文件中每一行的所有字符读为数组的一个元素??(初学者)

我想将一个test.txt 文件中的每行内容作为一个文件名的前缀,

main()
{
    FILE prefix; // 打开test.txt
    char filename_prefix[20]; //作为前缀,大于20只承认前19个字符。
   char filename_str[254];//从test.txt读出的每行字符。
  FILE_NAME file_prefix;//作为前缀。
   

   printf("filename prefix is %d\n",strlen(file_prefix));
            prefix=fopen("test.txt", "r");
       while((fgets(prefix_str,254,prefix))!= NULL)
      {
        fputs(prefix_str,stdout);
        printf("long is %d ",strlen(prefix_str));  
        strcpy(filename_prefix,prefix_str);               
         printf("filename prefix is %d\n",strlen(filename_prefix));
         printf("%s : %s\n", "prefix name:",filename_prefix);
       strcpy(file_prefix,filename_prefix);
     }
}


但是,每次我得到的每行文字后面多个换行符号,也就是filename_prefix不是我想要的aaaaa,
而是aaaaa

,
用strlen()看长度比我要的正好多1。也就是想我上边描述的。您看怎么解决?就是吧后面的换行符去掉,否则的话我将来用不能用这个打开比如aaaaa.surfix的文件而是aaaaa
             .surfix的文件


谢谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP