我一直在尝试操纵字符串“ Hello World!”的元素。在主要功能中找到。我的目标是将“ Hello World!”的小写字母大写。函数“ capitalize”内部,但它不允许我使用。我尝试返回该字符串而不处理任何元素,但效果很好,但是一旦包含了将小写字符转换为大写字符的代码部分,就会出现运行时错误,提示“线程1:EXC_BAD_ACCESS(代码= 2, address = 0x100000fa9)。是什么不允许我操纵字符数组,我应该怎么做才能解决它?
char *capitalize(char *str)
{
int i;
for(i = 0; i < 4; i++)
if(str[i] >= 'a' && str[i] <= 'z')
str[i] -= 32; //I receive an error hear saying
//Thread 1: EXC_BAD_ACCESS (code=2, address=0x100000fa9)
return str;
}
int main()
{
char string[40];
printf("\n%s\n", strcpy(string, capitalize("abcd")));
return 0;
}
问题是capitalize("abcd")
试图修改文字字符串。
所有文字字符串实际上是只读的,无法修改。尝试修改文字字符串会导致undefined behavior。
您需要使用非恒定数组并将指针传递到其第一个元素才能使其工作:
char string[40] = "abcd";
printf("\n%s\n", capitalize(string));