int main()
{
int num,k,p,w;
char parts[30];
char power[30];
scanf("%s",parts);
int count=strlen(parts);
for(w=0;w<count;w++){
if(parts[w]=='^')
num=w;
}
if(isdigit(num)) {
for(k=num+1 ; k<count ;k++)
strcat(power,parts[k]);
}
else{
strcpy(power,'1');
}
p=atoi(power);
printf(" the power is : %d\n",p);
}
..谁能告诉我这里有什么问题? 我继续运行代码,但没有任何反应......但它看起来不错
答案 0 :(得分:0)
问题:
如果用户输入的内容不包含'^'
,那么您的代码会显示Undefined Behavior,因为此处未初始化数字
if(isdigit(num))
如果输入确实包含'^'
,则if
将为真。
下面:
strcat(power,parts[k]);
strcat
在第一个参数中找到NUL终结符,并从该位置覆盖其第二个参数。但power
尚未初始化!所以,这也会调用Undefined Behavior。此外,parts[k]
是char
,但strcat
期望其参数均以NUL终止且属于const char*
类型。
使用
char power[30]={0};
并将strcat
更改为
strcat(power,&parts[k]);
这里也出现了同样的问题:
strcpy(power,'1');
将其更改为
strcpy(power,"1");
修复它。双引号使const char*
类型的字符串文字被\0
终止
下面:
scanf("%s",parts);
用户可以输入长度超过29个字符的字符串(\0
终止符为+1)。这也会导致Undefined Behavior。通过使用
scanf("%29s",parts);
完成此操作后,scanf
将从标准输入流中扫描最多29个字符(\0
终结符+1)。