2012-07-19 40 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"); 

现在你可以使用这个