当前位置: 首页 > 知识库问答 >
问题:

我在试图操作用户定义函数中的char数组的元素时收到一个错误

越福
2023-03-14
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;
}

共有1个答案

曾昂然
2023-03-14

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

所有文字字符串实际上都是只读的,不能修改。尝试修改文字字符串会导致未定义的行为。

您需要使用一个非常数组,并将一个指针传递给它的第一个元素以使其工作:

char string[40] = "abcd";
printf("\n%s\n", capitalize(string));
char *capitalize(char *str)
{
    for(size_t i = 0; str[i] != '\0'; i++)
        str[i] = toupper(str[i]);

    return str;
}
 类似资料:
  • 我目前正在做一个熊猫的数据框架。我正在重新格式化数据,以便在运行分析时更容易理解。列中的默认数据是一个字符串,类似于< code> something | something。例如< code >事故|可修复损坏。 我想在dataframe中创建两个新列,将字符串拆分为两个不同的字符串,并将拆分字符串的不同部分分配给不同的列。 这是预期的输出: 这是我目前拥有的代码: 它当前正在获取第一条记录,并

  • 我试图为用户显示$each循环中对象的传递情况(以百分比为单位)。在控制台中,我看到了正确的值,但在前端,只有在执行$each循环之后才显示项目的内容,然后显示100%。

  • 我在使用groupby和函数删除异常值时遇到一个TypeError: 我已经用:过滤了列中的NaN行,我应该怎么做才能使它正确返回?提前谢谢你的帮助。 这就是我通过,似乎很正常。 相关参考资料: 一元的操作数类型错误 一元的操作数类型错误

  • 这里我在可变长度中放了一个4值。我应该得到一个有4个元素的数组,但我只能输入3个元素。 输出: null 1 2 3 4 名称:1 名称:2 名称:3 名称:4 你知道为什么吗?

  • 本文向大家介绍php中删除数组的第一个元素和最后一个元素的函数,包括了php中删除数组的第一个元素和最后一个元素的函数的使用技巧和注意事项,需要的朋友参考一下 对于一个php数组,该如何删除该数组的第一个元素或者最后一个元素呢?其实这两个过程都可以通过php自带的函数 array_pop 和 array_shift 来完成,下面就具体介绍一下如何来操作。 (1)使用 array_pop 删除数组的

  • 本文向大家介绍php array_walk_recursive 使用自定的函数处理数组中的每一个元素,包括了php array_walk_recursive 使用自定的函数处理数组中的每一个元素的使用技巧和注意事项,需要的朋友参考一下 array_walk_recursive 对数组中的每个成员递归地应用用户函数 基本语法 bool array_walk_recursive ( array &$i