數組我有char *
一個這樣的數組:編輯的char *
char * gradient_xpm[] = {"abc", "def", "ghi"};
我需要改變這些字符串的值。
我試過strcpy
和=
算子,但它給了我一個分割錯誤。
e.g:
strcpy(gradient_xpm[1],"jkl");
gradient_xpm[1][2] = 'x';
我無法甚至編輯單個字符。我如何編輯這些值?
數組我有char *
一個這樣的數組:編輯的char *
char * gradient_xpm[] = {"abc", "def", "ghi"};
我需要改變這些字符串的值。
我試過strcpy
和=
算子,但它給了我一個分割錯誤。
e.g:
strcpy(gradient_xpm[1],"jkl");
gradient_xpm[1][2] = 'x';
我無法甚至編輯單個字符。我如何編輯這些值?
你有你的數組中的字符串常量,並且這些不能被改變。這是你的段錯誤的原因。
您需要設置您的數組而不使用字符串常量,然後將字符串常量複製到您的數組中。
喜歡的東西:
char *gradient_xpm[3];
gradient_xpm[1] = (char *) malloc(sizeof(char) * (MAX_STR_LEN + 1));
strncpy(gradient_xpm, "jkl", MAX_STR_LEN);
// now this will work:
gradient_xpm[1][2] = 'x';
同樣爲gradient_xpm[0]
,gradient_xpm[2]
。
你已經實現了這個使用字符串文字,你不能改變他們
不要編輯內容 - 這是一個壞,壞主意。在某些編譯器中,這將是編譯時錯誤,因爲字符串常量爲const char *
,而不是char*
。
相反,翻轉指針:
gradient_xpm[1] = "jkl";
您不能修改字符串常量,它被標記爲禁地。但是,您可以修改您在堆或堆棧上分配的內存。也就是說,如果您使用C++,請考慮使用the string
class的數組,而不是管理char *
陣列。內存管理問題更容易處理。
在C中修改字符串文字是未定義的行爲。所以任何事情都可能發生,不一定是段錯誤。
從C99 standard,6.4.5字符串文本6.4.5/6:
這些陣列是否是不同的條件是它們的 元素具有適當的值是不確定的。如果程序試圖修改這樣一個數組, 的行爲是未定義的。
這實際上比C++更C。這是很糟糕的C++實踐。 – Puppy
+1 @DeadMG但也許他需要使用接受C字符串的C庫? –
@EitanT這就是'.c_str()'的用途。 – KillianDS