Kiw*_*iwi 3 c pointers cstring
我有两个指向同一个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;
}
Run Code Online (Sandbox Code Playgroud)
这不起作用.我敢肯定我错过了一些明显的东西 - 我对C的经验非常非常少.
谢谢你的帮助!
Jam*_*lis 10
您正在尝试修改字符串文字.字符串文字不可修改(即它们是只读的).
尝试修改字符串文字的程序显示未定义的行为:程序可能能够"成功"修改字符串文字,程序可能会崩溃(立即或稍后),程序可能会出现异常和意外行为,或者别的什么都可能发生.当行为未定义时,所有投注均已关闭.
您的代码声明original_string
为指向字符串文字的指针"ABC"
:
char* original_string = "ABC";
Run Code Online (Sandbox Code Playgroud)
如果您将其更改为:
char original_string[] = "ABC";
Run Code Online (Sandbox Code Playgroud)
你应该好好去.这声明了一个char
用字符串文字的内容初始化的数组"ABC"
.数组自动给出四个元素的大小(在编译时),因为这是保存字符串文字所需的大小(包括空终止符).