使用指针简单修改C字符串

我有两个指向同一个C字符串的指针。 如果我将第二个指针递增1,并将第二个指针的值赋给第一个指针的值,我希望改变第一个字符串的第一个字符。 例如:

#include "stdio.h" int main() { char* original_str = "ABC"; // Get pointer to "ABC" char* off_by_one = original_str; // Duplicate pointer to "ABC" off_by_one++; // Increment duplicate by one: now "BC" *original_str = *off_by_one; // Set 1st char of one to 1st char of other printf("%s\n", original_str); // Prints "ABC" (why not "BBC"?) *original_str = *(off_by_one + 1); // Set 1st char of one to 2nd char of other printf("%s\n", original_str); // Prints "ABC" (why not "CBC"?) return 0; } 

这不起作用。 我确定我错过了一些明显的东西 – 我对C的经历非常非常少。

谢谢你的帮助!

您正在尝试修改字符串文字。 字符串文字不可修改(即它们是只读的)。

尝试修改字符串文字的程序会显示未定义的行为:程序可能能够“成功”修改字符串文字,程序可能会崩溃(立即或稍后),程序可能会出现exception和意外行为,或者别的什么都可能发生。 行为未定义时,所有投注均已关闭。

您的代码将original_string声明为指向字符串文字"ABC"的指针:

 char* original_string = "ABC"; 

如果您将其更改为:

 char original_string[] = "ABC"; 

你应该好好去。 这声明了一个char数组,它使用字符串文字"ABC"的内容进行初始化。 数组自动给出四个元素的大小(在编译时),因为这是保存字符串文字所需的大小(包括空终止符)。

问题是你不能修改文字“ABC”,它是只读的。

尝试char[] original_string = "ABC" ,它使用数组来保存您可以修改的字符串。