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

Segmentation Error for Implementation of toUpper() in C

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

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

我这样调用函数:

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

字符串文字是不可修改的。由于历史的偶然,它们与 char* 兼容。因此,您遇到了运行时错误。如果您启用警告,您的编译器会告诉您您在这里犯了一个错误。

这里有更多信息:Are string literals const?

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

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

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

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