你好,
我有一个函数ft_strupcase
,它接受一个char*
(大写(,并返回参数。该问题是在测试过程中出现的,即在main
中使用该函数。以下程序导致分段故障:
int main()
{
char *hey = "hEy";
printf("%sn", ft_strupcase(hey));
}
而这种变体没有:
int main()
{
char hey[] = "hEy";
printf("%sn", ft_strupcase(hey));
}
*str
和str[]
不一样吗?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
。第一个代码试图通过传递一个函数来修改指向=
右侧的东西。第二个代码修改=
左侧的东西,这是完全合法的。