网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月14日漏签0天
上海交通大学吧 关注:429,449贴子:5,860,280
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 31回复贴,共1页
<<返回上海交通大学吧
>0< 加载中...

【c语言】我是来寻找大神的= =

  • 只看楼主
  • 收藏

  • 回复
  • 威武德小胖
  • 一品川味
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
拜托了。。。。学渣遇到了一点小问题。。。。。求大神。。。长跪不起
我用calloc输入字符串之后,在fopen里打开文件,debug的时候一直说程序stop working~
然后我用puts来检查文件名,用strlen都是没有错误的~这是为什么呢?用puts来检查文件名,用strlen检查长度,比如文件名 a.txt,puts显示出来也是a.txt,strlen计算长度是5,都是没有错误的~
char* filename;
\\省略了一点无关紧要的代码
......
filename=(char*)calloc(81,sizeof(char));
for(i=index+1,j=0;i<243;i++,j++) //从keyandfile字符串中选取一段放到filename里
{
if(keyandfile[i]!=' ')
{
filename[j]=keyandfile[i];
}else{
index2=i;
break;
}
}
if((fp=fopen(filename,"r"))==NULL)
{
printf("Input file not found.");
exit(0);
}


  • 7陌路
  • 甜魔咖啡
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不会帮顶


蓦然回首(山东)教育信息
交通大学成人大学,专业与科目信息一览表,新政策须知。交通大学成人大学,全程负责,轻松取得学历,在职拿学历,在线解答,指导!
2025-05-14 13:11广告
立即查看
2025-05-14 13:11:53
广告
  • myjisgreat
  • 大黑子
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
calloc不是申请空间么?怎么是输入了?你输入到底用的是什么?cin?scanf?然后debug下来到底是哪句话出错?不知道的话在vc里f5运行,他能定位到出错的语句


  • myjisgreat
  • 大黑子
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
一般这种问题是数组越界所致,你那段for后面你确定filename用以\0结尾的么?你不是以空格结尾的么?


  • 威武德小胖
  • 一品川味
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
printf("Please enter the key, input filename, and output filename:\n"); //input the key
keyandfile=(char*)calloc(243,sizeof(char));
gets(keyandfile);
k=(char*)calloc(81,sizeof(char));
for(i=0;i<243;i++)
{
if(keyandfile[i]!=' ')
{
k[i]=keyandfile[i];
}else{
index=i;
break;
}
}
filename=(char*)calloc(81,sizeof(char));
for(i=index+1,j=0;i<243;i++,j++)
{
if(keyandfile[i]!=' ')
{
filename[j]=keyandfile[i];
}else{
index2=i;
break;
}
}
outputfilename=(char*)calloc(81,sizeof(char));
for(i=index2+1,j=0;i<243;i++,j++)
{
if(keyandfile[i]!='\n')
{
outputfilename[j]=keyandfile[i];
}else{
break;
}
}
puts(k);
puts(filename);
puts(outputfilename);
printf("%d\n",strlen(k));
printf("%d\n",strlen(filename));
printf("%d\n",strlen(outputfilename));
if((fp=fopen(filename,"r"))==NULL)
{
printf("Input file not found.");
exit(0);
}
if((ofp=fopen(outputfilename,"w"))!=NULL)
{
printf("Output file already exists. Overwrite (y/n)? ");
scanf("%c",&newoutputfile);
if(newoutputfile='n')
{
exit(0);
}else if(newoutputfile='y')
{
outputfilename[31]=outputfilename[31];
}
}


  • myjisgreat
  • 大黑子
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
看来是字符串没有结束符的原因,字符串在最后必须以\0结尾,比如字符串有5个有效字符,s[5]=0即可


  • 威武德小胖
  • 一品川味
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
搞定了搞定了!我把越界的\0加进去,还有从keyandfile里提取filename的循环终止条件改了下!
printf("Please enter the key, input filename, and output filename:\n"); //input the key
keyandfile=(char*)calloc(243,sizeof(char));
gets(keyandfile);
k=(char*)calloc(81,sizeof(char));
for(i=0;i<243;i++)
{
if(keyandfile[i]!=' ')
{
k[i]=keyandfile[i];
}else{
index=i;
break;
}
}
filename=(char*)calloc(81,sizeof(char));
for(i=index+1,j=0;i<strlen(keyandfile)+1;i++,j++)
{
if(keyandfile[i]!=' ')
{
filename[j]=keyandfile[i];
}else{
index2=i;
filename[j]='\0';
break;
}
}
outputfilename=(char*)calloc(81,sizeof(char));
for(i=index2+1,j=0;i<strlen(keyandfile)+1;i++,j++)
{
if(keyandfile[i]!='\n')
{
outputfilename[j]=keyandfile[i];
}else{
outputfilename[j]='\0';
break;
}
}
if((fp=fopen(filename,"r"))==NULL)
{
printf("Input file not found.");
exit(0);
}
if((ofp=fopen(outputfilename,"w"))!=NULL)
{
printf("Output file already exists. Overwrite (y/n)? ");
scanf("%c",&newoutputfile);
if(newoutputfile='n')
{
exit(0);
}else if(newoutputfile='y')
{
outputfilename[31]=outputfilename[31];
}
}


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 31回复贴,共1页
<<返回上海交通大学吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示