簡體   English   中英

使用指針簡單修改C字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM