谁能告诉我为什么C中的第一个示例给出了Segmentation Fault(核心转储)而第二个却没有?

时间:2020-09-28 22:22:44

标签: c pointers segmentation-fault

int main() {

        char* string = "Hello world";
        string[2] = 'd';

        printf("%s\n", string);

        return 0;
}
int main() {

        time_t now;
        time(&now);
                                                                                            $        
        char* time = ctime(&now) + 11;
        time[8] = '\0';                                                                      
        printf("%s\n", time);

        return 0;
}

就像在第二个示例中一样,我能够为指针修改数组的特定索引,以使用NULL字符终止字符串。但是,对于第一个,我只是尝试将索引2处的字符更改为字母“ d”,但它拒绝打印输出,并且出现了Segmentation Fault错误!

我的猜测是,在第二个例子中,使用&号将内存中地址的内容获取到指针所指向的地方有些细微的差别,但这只是我的猜测。希望有人能给我一个清晰而又不太混乱的解释,这是为什么...谢谢!

0 个答案:

没有答案