当尝试在用户定义的函数内操作char数组的元素时收到错误

问题描述 投票:0回答:1

我一直在尝试操纵字符串“ 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;
}
c arrays pointers char c-strings
1个回答
0
投票

问题是capitalize("abcd")试图修改文字字符串。

所有文字字符串实际上是只读的,无法修改。尝试修改文字字符串会导致undefined behavior

您需要使用非恒定数组并将指针传递到其第一个元素才能使其工作:

char string[40] = "abcd";
printf("\n%s\n", capitalize(string));
© www.soinside.com 2019 - 2024. All rights reserved.