在C中实现toUpper()的分段错误

时间:2015-09-02 05:12:37

标签: c segmentation-fault

我正在尝试在C中自己实现toupper()函数;我的函数应该适用于任何长度的字符串。当我尝试更改字符串的内容时,我不确定为什么我的编译器会抛出分段错误,如下所示。有没有办法解决这个错误? (我尝试使用数组而不是指针,但无济于事。)注意:isLetter()是我编写的一个函数,用于确定字符是否为字母字符。

void toUpper(char *s){
while(*s != '\0'){
    if(isLetter(*s)&&(*s> 90)){     
        *s += ('a' - 'A');
    }
    s++;
}

我这样称呼函数:

char *s = "Hello";
toUpper(s); 

1 个答案:

答案 0 :(得分:3)

char *s = "Hello";

字符串文字是不可修改的。通过历史事故,他们与char*兼容。因此,您遇到的运行时错误。如果启用警告,编译器会告诉您在这里犯了错误。

此处提供更多信息:Are string literals const?

改为传递可修改的字符串:

char s[] = "Hello";
toUpper(s);

然后你需要修复你的函数中的错误。循环体应为:

if (*s >= 'a' && *s <= 'z')
    *s -= ('a' - 'A');