我有这个代码:
void changeToCapital(char* str)
{
int i;
for (i=0; i<strlen(str); i++)
{
str[i] =str[i] -32;
}
}
并且此方法应该获取一个 char*
变量,并将其更改为大写。出于某种原因,我收到一条错误消息,提示 EXECUTE_BAD_ACCESS
。
调用函数:
char* s = "itzik";
changeToCapital(s);
printf("%s\n",s);
我在这里做错了什么?
最佳答案
这很可能是因为您向它传递了一个指向不可写内存的指针,例如从字符串文字中获得的指针:
char *ptr = "Hello";
changeToCapital(ptr); // <<== ERROR !
您可以更改调用以避免错误:
char ptr[] = "Hello";
changeToCapital(ptr);
附带说明,只有当所有字母均为小写时,您对大写的更改才有效。您应该使用 toupper(ch)
函数而不是减去 32。
void changeToCapital(char* str) {
for (; *str = toupper(*str) ; str++)
;
}
关于c - C语言中的大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10689876/