我正在尝试在C中自己实现toupper()
函数;我的函数应该适用于任何长度的字符串。当我尝试更改字符串的内容时,我不确定为什么我的编译器会抛出分段错误,如下所示。有没有办法解决这个错误? (我尝试使用数组而不是指针,但无济于事。)注意:isLetter()
是我编写的一个函数,用于确定字符是否为字母字符。
void toUpper(char *s){
while(*s != '\0'){
if(isLetter(*s)&&(*s> 90)){
*s += ('a' - 'A');
}
s++;
}
我这样称呼函数:
char *s = "Hello";
toUpper(s);
答案 0 :(得分:3)
char *s = "Hello";
字符串文字是不可修改的。通过历史事故,他们与char*
兼容。因此,您遇到的运行时错误。如果启用警告,编译器会告诉您在这里犯了错误。
此处提供更多信息:Are string literals const?
改为传递可修改的字符串:
char s[] = "Hello";
toUpper(s);
然后你需要修复你的函数中的错误。循环体应为:
if (*s >= 'a' && *s <= 'z')
*s -= ('a' - 'A');