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