一道acm题,在c-free上可以测试成功但是却不能ac!

问题:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1267代码:#include<stdio.h>#include<... 问题:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1267
代码:
#include<stdio.h>
#include<string.h>
int main()
{
int z[27]={0};
int t;
char str2=NULL,
str3[2]={NULL};
char str1[5];
int l;
int T;
scanf("%d",&T);
while(T>0)
{
scanf("%s %c,%s",&str1,&str2,&str3);
l=strlen(str3);
if(strcmp(str1,"mov")==0)
{
if(('a'-'0') <= (str3[0]-'0')&&(str3[0]-'0') <= ('z'-'0'))
{
z[str2-'a']=z[str3[0]-'a'];
}
else
{
if(l==2)
t=(str3[0]-'0')*10+str3[1]-'0';
else
t=str3[0]-'0';
z[str2-'a']=t;
}
}
else if(strcmp(str1,"add")==0)
{
if(('a'-'0') <= (str3[0]-'0')&&(str3[0]-'0') <= ('z'-'0'))
{
z[str2-'a']+=z[str3[0]-'a'];
}
else
{
if(l==2)
t=(str3[0]-'0')*10+str3[1]-'0';
else
t=str3[0]-'0';
z[str2-'a']+=t;
}
}
else if(strcmp(str1,"sub")==0)
{
if(('a'-'0') <= (str3[0]-'0')&&(str3[0]-'0') <= ('z'-'0'))
{
z[str2-'a']-=z[str3[0]-'a'];
}
else
{
if(l==2)
t=(str3[0]-'0')*10+str3[1]-'0';
else
t=str3[0]-'0';
z[str2-'a']-=t;
}
}
else if(strcmp(str1,"print")==0)
{
printf("%d\n",z[str2-'a']);
}
str1[5]=NULL;
str2=NULL;
str3[2]=NULL;
--T;
}//大循环
return 0;
}
展开
 我来答
zhaoyj163em
推荐于2016-09-04 · TA获得超过1033个赞
知道小有建树答主
回答量:268
采纳率:0%
帮助的人:359万
展开全部
#include<stdio.h>
#include<string.h>
int main()
{
int z[27]={0};
int t;
char str2=NULL,
str3[3]={NULL};//2 --> 3
char str1[6]; // 5-->6
int l;
int T;
scanf("%d",&T);
while(T>0)
{
scanf("%s %c,%s",&str1,&str2,&str3);
l=strlen(str3);
if(strcmp(str1,"mov")==0)
{
if(('a'-'0') <= (str3[0]-'0')&&(str3[0]-'0') <= ('z'-'0'))
{
z[str2-'a']=z[str3[0]-'a'];
}
else 
{
if(l==2)
t=(str3[0]-'0')*10+str3[1]-'0';
else
t=str3[0]-'0';
z[str2-'a']=t;
}
}
else if(strcmp(str1,"add")==0)
{
if(('a'-'0') <= (str3[0]-'0')&&(str3[0]-'0') <= ('z'-'0'))
{
z[str2-'a']+=z[str3[0]-'a'];
}
else 
{
if(l==2)
t=(str3[0]-'0')*10+str3[1]-'0';
else
t=str3[0]-'0';
z[str2-'a']+=t;
}
}
else if(strcmp(str1,"sub")==0)
{
if(('a'-'0') <= (str3[0]-'0')&&(str3[0]-'0') <= ('z'-'0'))
{
z[str2-'a']-=z[str3[0]-'a'];
}
else 
{
if(l==2)
t=(str3[0]-'0')*10+str3[1]-'0';
else
t=str3[0]-'0';
z[str2-'a']-=t;
}
}
else if(strcmp(str1,"print")==0)
{
printf("%d\n",z[str2-'a']);
}
str1[5]=NULL;
str2=NULL;
str3[2]=NULL;
--T;
}//大循环 
return 0;
}

你知道C里面用数组存储字符串,要预留一个位置放置字符串尾部的\0吗?

也就是存储“print”这个字符串的时候,应该开一个长度为6的数组,数组存储的字符依次是

'p'  'r'  'i'  'n'  't'  '\0'

'\0'是字符串的结束标志。

改了数组大小就能过了。

富港检测技术(东莞)有限公司_
2024-05-27 广告
ISTA3E程序是对相同产品的集合包装的综合模拟性能测试,集合包装件被定义为将一个产品、多个产品或包装件放置在滑板或托盘上,固定在一起或是作为一个单元运输。例如:一台机器由带瓦楞底托的托盘上、瓦楞侧围、顶盖包装,用缠绕膜缠绕在托盘上。用于评... 点击进入详情页
本回答由富港检测技术(东莞)有限公司_提供
yl_shadow
2014-08-29 · TA获得超过960个赞
知道小有建树答主
回答量:257
采纳率:66%
帮助的人:378万
展开全部
char str2=NULL,
str3[2]={NULL};
char str1[5];
//str3的下标范围是0~1
//str1的下标范围是0~4
…………

str1[5]=NULL;
str2=NULL;
str3[2]=NULL;
//str1[5]和str3[2]的访问越界了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式