[英]Simple modification of C strings using pointers
我有兩個指向同一個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的經驗非常非常少。
謝謝你的幫助!
您正在嘗試修改字符串文字。 字符串文字不可修改(即它們是只讀的)。
嘗試修改字符串文字的程序顯示未定義的行為:程序可能能夠“成功”修改字符串文字,程序可能會崩潰(立即或稍后),程序可能會出現異常和意外行為,或者別的什么都可能發生。 當行為未定義時,所有投注均已關閉。
您的代碼將original_string
聲明為指向字符串文字"ABC"
的指針:
char* original_string = "ABC";
如果您將其更改為:
char original_string[] = "ABC";
你應該好好去。 這聲明了一個char
數組,它使用字符串文字"ABC"
的內容進行初始化。 數組自動給出四個元素的大小(在編譯時),因為這是保存字符串文字所需的大小(包括空終止符)。
問題是你不能修改文字“ABC”,它是只讀的。
嘗試char[] original_string = "ABC"
,它使用數組來保存您可以修改的字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.