尝试运行此代码时出现总线错误。它的目标是用数字替换某些字母,用3代替E,用0代替O,依此类推。

#include <stdio.h>
#include <string.h>
#define MAX_BUF 1024

int main () {

char buf[MAX_BUF];
int length;
// other stuff
do {
    // read a line
    fgets(buf, MAX_BUF, stdin);
    // calculate its length
    int len = strlen(buf) - 1;
    // modify the line by switching characters
    char buf2[MAX_BUF];
    strcpy(buf2, buf);
    int i;
    for(i = 0; i < length; i++){
            if (buf2[i] == 'E' || buf2[i] == 'e'){
                    buf2[i] = '3';
            }
            if (buf2[i] == 'I' || buf2[i] == 'i'){
                    buf2[i] = '1';
            }
            if (buf2[i] == 'O' || buf2[i] == 'o'){
                    buf2[i] = '0';
            }
            if (buf2[i] == 'S' || buf2[i] == 's'){
                    buf2[i] = '5';
            }
    }
    // print the modified line
    printf("%s", buf2);
} while (length > 1);
}


输入的预期输出

“敏捷的棕色狐狸跳过了懒狗。”是

“ th3 qu1ck br0wn f0x jump5 0v3r th3 lazy d0g。”

但是同样,该程序会引发“总线错误”,我不理解也不知道如何发现。

最佳答案

变量length用于限制两个循环的迭代,但从未分配任何值。这是未定义的行为,总线错误绝对是可能的结果。

您是否打算为此目的使用len

编辑:strlen在其返回值中已经不包括空终止符。 strlen(buf) - 1可能不是您想要的。

关于c - 抛出总线错误,不明白为什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54683158/

10-11 19:00