日安,
我有一个函数ft_strupcase,它接受一个char*,大写它,并返回参数.这个问题出现在测试过程中,即在main中使用该函数。以下程序导致分段错误:
int main()
{
char *hey = "hEy";
printf("%s\n", ft_strupcase(hey));
}然而,这种变化并没有:
int main()
{
char hey[] = "hEy";
printf("%s\n", ft_strupcase(hey));
}*str和str[]不是一样的吗?str[i] = *(str + i)不是吗?那么,为什么我会遇到分段故障呢?
发布于 2021-06-09 19:44:35
int main()
{
char *hey = "hEy";
printf("%s\n", ft_strupcase(hey));
}在这段代码中,hey指向一个字符串文本,它是一个常量。然后,ft_strupcase修改您传递给它的指针。所以这段代码试图修改常量。
你不能修改常量。这就是保持不变的意思。
int main()
{
char hey[] = "hEy";
printf("%s\n", ft_strupcase(hey));
}在这里,hey是一个字符数组,由一个常量初始化。数组是可修改的,因为数组条目不是常量。
如果有int i = 3;,则可以修改i,但不能修改3。第一段代码试图通过传递一个函数来修改=右侧的东西,该函数修改指向指向它的指针的东西。第二个代码修改=左侧的东西,这是完全合法的。
https://stackoverflow.com/questions/67910739
复制相似问题