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/

10-12 17:28