关于一个字符串数组的赋值问题

backommi 2006-09-05 01:42:22
char *inputdata_list[1400]------------1、定义一个字符串数组

FILE *data_infp;----------------------2、打开一个文件指针指向inputdata_windii.dat
if ( (data_infp = fopen("inputdata_windii.dat", "r")) == NULL)
{
printf("cannot open inputdata_windii.dat \n");
return;
}

while (!feof(data_infp))-------3、当文件指针没有到文件末尾时,把指针读到的内容存入字符串数组
{

if(fscanf(data_infp,"%s",inputdata_list[f])<0)
break;
f++;
}
*************
inputdata_windii.dat的内容大致是
WINDII_L3AL_SZONWIN_A_Y1991_M11_V0011/WINDII_L3AL_SZONWIN_A_D0054.V0011_C02data.dat
WINDII_L3AL_SZONWIN_A_Y1991_M11_V0011/WINDII_L3AL_SZONWIN_A_D0055.V0011_C02data.dat
WINDII_L3AL_SZONWIN_A_Y1991_M11_V0011/WINDII_L3AL_SZONWIN_A_D0056.V0011_C02data.dat
。。。。。
。。。。。

一共有1281个文件名
*************
但是整个程序运行时就卡在第3步过不去,很长时间以后显示段错误。
运行环境是linux FC4 ,gcc 4.0编译器。而且系统默认的stacksize已经被改成 unlimited
请问高手们知道我的第三步有何错误吗,或者这种情况下字符串数组该怎样定义和赋值?
...全文
789 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
夜-快乐奔跑 2006-09-05
  • 打赏
  • 举报
回复
程序正常运行了,但是按jixingzhong的方法 free(inputdata_list[f]); 放在
while (!feof(data_infp))
{
inputdata_list[f] = (char *)malloc(256*sizeof(char));
if(fscanf(data_infp,"%s",inputdata_list[f])<0)
break;
f++;
}里面的话,inputdata_list[]里面的所有内容都只是inputdata_windii.dat的最后一行的内容。。。
我没有用free,inputdata_list[]正常的读出了所有的字符串,但是这样会有什么危害呢?另外,怎么给分啊
________________________________________________________________________________-
你把free(inputdata_list[f])放在while循环里面的话肯定读入一行都被free 掉了,自然没有以前的内容,你可以在程序的最后写一个循环专门来free inputdata_list[]这个数组,如果不
free的话,会造成内存泄露。
睡在床板下_ 2006-09-05
  • 打赏
  • 举报
回复
最上面 : 管理
给分
睡在床板下_ 2006-09-05
  • 打赏
  • 举报
回复
我没有用free,inputdata_list[]正常的读出了所有的字符串,
空间不会被释放...
最好是在程序最后,补上
for(int i=0;i<1400,i++)
free(inputdata_list[i]);
backommi 2006-09-05
  • 打赏
  • 举报
回复
程序正常运行了,但是按jixingzhong的方法 free(inputdata_list[f]); 放在
while (!feof(data_infp))
{
inputdata_list[f] = (char *)malloc(256*sizeof(char));
if(fscanf(data_infp,"%s",inputdata_list[f])<0)
break;
f++;
}里面的话,inputdata_list[]里面的所有内容都只是inputdata_windii.dat的最后一行的内容。。。
我没有用free,inputdata_list[]正常的读出了所有的字符串,但是这样会有什么危害呢?另外,怎么给分啊
backommi 2006-09-05
  • 打赏
  • 举报
回复
晕,怎么给分啊
backommi 2006-09-05
  • 打赏
  • 举报
回复
呵呵,谢谢各位的回答。。。。搞定了
小兽 2006-09-05
  • 打赏
  • 举报
回复
嗯,楼上高手说得很对,malloc是关键。
jixingzhong 2006-09-05
  • 打赏
  • 举报
回复
记得在空间使用结束后

free(inputdata_list[f]);
释放内存空间
jixingzhong 2006-09-05
  • 打赏
  • 举报
回复
while (!feof(data_infp))-------3、当文件指针没有到文件末尾时,把指针读到的内容存入字符串数组
{

if(fscanf(data_infp,"%s",inputdata_list[f])<0)
break;
f++;
}
==》
while (!feof(data_infp))
{
inputdata_list[f] = (char *)malloc(256*sizeof(char));
if(fscanf(data_infp,"%s",inputdata_list[f])<0)
break;
f++;
}

256 是指针空间,
你可以根据实际情况设置。
jixingzhong 2006-09-05
  • 打赏
  • 举报
回复
显然指针操作错误 ...
vision2004 2006-09-05
  • 打赏
  • 举报
回复
malloc
free
backommi 2006-09-05
  • 打赏
  • 举报
回复
谢谢各位的回答,我不太会用C++,而且整个程序非常长都是用C编的,所以最好还是用C解决。。。
问个笨问题,该怎样给这个数组分配空间呢,能不能给段代码。。“new”好像是C++里面的,c里没有
飞哥 2006-09-05
  • 打赏
  • 举报
回复
你那个数组没空间
boot2006 2006-09-05
  • 打赏
  • 举报
回复
char *inputdata_list[1400]
=====>
char (*inputdata_list)[1400]
qingyuan18 2006-09-05
  • 打赏
  • 举报
回复
你的文件每行用回车换行的吧?用C++流操作起来方便些:

stringstring sstr;
ifstream fin;
fin.open("inputdata_windii.dat");

fi(!fin)
{
cout<<"打开文件错误!"<<endl;
}

char szBuf[1024];
memset(szBuf,0,sizeof(szBuf));
SOutputInfo outputInfo;

while(fin.getline(szBuf,size(szBuf))!=NULL)
{
//对每行文本的操作
}
fin.close();
vision2004 2006-09-05
  • 打赏
  • 举报
回复
你因该先给数组inputdata_list中的每个元素分配空间,或者在需要读入到某个指针中时,给他分配足够的空间
backommi 2006-09-05
  • 打赏
  • 举报
回复
对了,f初值为0

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧