2012-07-19 47 views
0

Possible Duplicate:
Is it possible to modify a string of char in C?轉換的char *爲小寫拋出段錯誤錯誤

我有一個函數來轉換一個char *爲小寫。這是函數:

void toLower(char* word, int length) 
{ 
    int i; 

    for(i = 0; i < length; i++) { 
     // this I can do 
     // printf("%c", tolower(word[i])); 

     // this throws segfault 
     word[i] = tolower(word[i]); 
    } 
} 

當我這樣稱呼它從主,它拋出一個segfault錯誤:

char* needle = "foobar"; 
toLower(needle, strlen(needle)); 

我敢肯定的問題是分配在這裏:

word[i] = tolower(word[i]); 

但我似乎無法弄清楚這樣做的核心方法。我嘗試通過它作爲char**,或做*(word+i),但都導致相同的問題。

回答

6

您正在嘗試更改常量字符串"foobar"。嘗試:

char needle[] = "foobar"; 

這將創建一個包含字符串"foobar"陣列(編譯器將數據從字符串常量"foobar"複製到陣列needle在那裏你可以修改)。

0

問題是char *needle = "foobar"是一個字符串文字 - 它是一個常量字符。爲了編譯器生成可寫字符串,請使用

char needle[] = "foobar"; 

改爲。

1

您不能修改字符串文字。您可以創建一個動態字符串:

char *str = strdup(needle); 
toLower(str, strlen(str)); 
/* ... */ 
free(str); 
0

更改字符串文字是不可能的。
只能在兩種情況下做到這一點

word[i] = tolower(word[i]); 

,無論是

char needle[] = "foobar"; 


先使用malloc創造記憶的char *,然後一個字符串分配給它,這樣

char * str = (char *) malloc(size0f(char)*10); 
strcpy(str,"foobar"); 

現在你可以使用這個