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

  • 本文关键字:分割 错误 字符串 编辑 c string
  • 更新时间 :
  • 英文 :


你好,

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

int main()
{
char *hey = "hEy";
printf("%sn", ft_strupcase(hey));
}

而这种变体没有:

int main()
{
char hey[] = "hEy";
printf("%sn", ft_strupcase(hey));
}

*strstr[]不一样吗?str[i]不是等于*(str + i)吗?为什么我会遇到segfault?

int main()
{
char *hey = "hEy";
printf("%sn", ft_strupcase(hey));
}

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

不能修改常量。这就是事物保持不变的意义。

int main()
{
char hey[] = "hEy";
printf("%sn", ft_strupcase(hey));
}

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

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

最新更新