2012-06-15 26 views
0

數組我有char *一個這樣的數組:編輯的char *

char * gradient_xpm[] = {"abc", "def", "ghi"}; 

我需要改變這些字符串的值。

我試過strcpy=算子,但它給了我一個分割錯誤。

e.g:

strcpy(gradient_xpm[1],"jkl"); 
gradient_xpm[1][2] = 'x'; 

我無法甚至編輯單個字符。我如何編輯這些值?

+4

這實際上比C++更C。這是很糟糕的C++實踐。 – Puppy

+0

+1 @DeadMG但也許他需要使用接受C字符串的C庫? –

+1

@EitanT這就是'.c_str()'的用途。 – KillianDS

回答

4

你有你的數組中的字符串常量,並且這些不能被改變。這是你的段錯誤的原因。

您需要設置您的數組而不使用字符串常量,然後將字符串常量複製到您的數組中。

喜歡的東西:

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]

0

你已經實現了這個使用字符串文字,你不能改變他們

0

不要編輯內容 - 這是一個壞,壞主意。在某些編譯器中,這將是編譯時錯誤,因爲字符串常量爲const char *,而不是char*

相反,翻轉指針:

gradient_xpm[1] = "jkl"; 
1

您不能修改字符串常量,它被標記爲禁地。但是,您可以修改您在堆或堆棧上分配的內存。也就是說,如果您使用C++,請考慮使用the string class的數組,而不是管理char *陣列。內存管理問題更容易處理。

3

在C中修改字符串文字是未定義的行爲。所以任何事情都可能發生,不一定是段錯誤。

C99 standard,6.4.5字符串文本6.4.5/6:

這些陣列是否是不同的條件是它們的 元素具有適當的值是不確定的。如果程序試圖修改這樣一個數組, 的行爲是未定義的。