C语言 取消引用相同地址时总线错误[重复]

8ehkhllq  于 2022-12-17  发布在  其他
关注(0)|答案(1)|浏览(107)

此问题在此处已有答案

(19个答案)
3天前关闭。
我正在尝试K&R的squeeze程序。但是,我一直得到一个总线错误。下面的代码直接触发了这个问题。这个程序不应该是可移植的吗?

int main() {
    char* str = "foo";
    for (int i = 0, j = 0; str[i]; ++i)
        str[j] = '.';
}

书中的函数:

void squeeze(char s[], int c)
{
    int i, j;

    for (i = j = 0; s[i] != '\0'; i++)
        if (s[i] != c)
            s[j++] = s[i];
    s[j] = '\0';
}
mum43rcc

mum43rcc1#

str指向一个字符串常量。这样的常量是只读的,所以试图修改它们会触发undefined behavior,在你的特定情况下,这会导致程序崩溃。
相反,将str声明为数组,可以修改该数组:

char str[] = "foo";

相关问题