C语言的大写

我有这个代码:

void changeToCapital(char* str) { int i; for (i=0; i<strlen(str); i++) { str[i] =str[i] -32; } } 

并且此方法应该获取char*变量,并将其更改为大写。 出于某种原因,我收到一条错误说EXECUTE_BAD_ACCESS

调用function:

 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++) ; } 

第一:

你一直在计算strlen 。 相反,您应该将字符串的长度存储在局部变量中。

第二:你可能正在调用这样的函数:

 char *str = "Hello World"; changeToCapital(str); 

这很糟糕"Hello World"const ,不能由您的程序修改。 相反,您应该将字符串指定为字符数组,以确保它是不可变的:

 char str[] = "Hello World"; changeToCapital(str);