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);
}
..谁能告诉我这是怎么回事?
我一直在运行代码,但是什么也没有发生……但是对我来说似乎还不错
最佳答案
问题:
如果用户输入的内容不包含'^'
,则您的代码将显示Undefined Behavior,因为此处未初始化num
if(isdigit(num))
如果输入中确实包含
'^'
,则if
为true。这里:
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)。关于c - 从多项式中提取能力,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29431102/