首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么在C中编辑*字符串会导致分段错误,而[]字符串却不会呢?

为什么在C中编辑*字符串会导致分段错误,而[]字符串却不会呢?
EN

Stack Overflow用户
提问于 2021-06-09 19:42:12
回答 1查看 108关注 0票数 1

日安,

我有一个函数ft_strupcase,它接受一个char*,大写它,并返回参数.这个问题出现在测试过程中,即在main中使用该函数。以下程序导致分段错误:

代码语言:javascript
复制
    int main()
    {
        char *hey = "hEy";
        printf("%s\n", ft_strupcase(hey));
    }

然而,这种变化并没有:

代码语言:javascript
复制
    int main()
    {
        char hey[] = "hEy";
        printf("%s\n", ft_strupcase(hey));
    }

*strstr[]不是一样的吗?str[i] = *(str + i)不是吗?那么,为什么我会遇到分段故障呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-09 19:44:35

代码语言:javascript
复制
int main()
{
    char *hey = "hEy";
    printf("%s\n", ft_strupcase(hey));
}

在这段代码中,hey指向一个字符串文本,它是一个常量。然后,ft_strupcase修改您传递给它的指针。所以这段代码试图修改常量。

你不能修改常量。这就是保持不变的意思。

代码语言:javascript
复制
int main()
{
    char hey[] = "hEy";
    printf("%s\n", ft_strupcase(hey));
}

在这里,hey是一个字符数组,由一个常量初始化。数组是可修改的,因为数组条目不是常量。

如果有int i = 3;,则可以修改i,但不能修改3。第一段代码试图通过传递一个函数来修改=右侧的东西,该函数修改指向指向它的指针的东西。第二个代码修改=左侧的东西,这是完全合法的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67910739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档