我有兩個指向相同C字符串的指針。如果我將第二個指針加1,並將第二個指針的值賦給第一個指針,我期望第一個字符串的第一個字符被改變。例如:使用指針簡單修改C字符串
#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的使用非常非常少。
感謝您的幫助!
很好,謝謝! – Kiwi 2010-05-27 13:24:23
它如何不可修改?我並不爭論它,但我想知道是什麼讓字符串字面不變。編譯器是否執行它?如果是這樣,那麼爲什麼這不是一個編譯器錯誤?文字是否位於操作系統標記爲只讀的內存塊中? – 2010-05-27 13:33:52
@A。 Levy:它是「不可修改的」,因爲語言標準規定修改字符串文字會導致未定義的行爲。在許多實現中,字符串文字被放置在某些標記爲只讀的內存塊中,因此如果您嘗試寫入,則會出現某種分段錯誤或訪問衝突。 – 2010-05-27 13:47:57