gpt4 book ai didi

c - 为什么我可以通过传递一个变量而不是传递一个真正的字符串来反转字符串? (简单代码)

转载 作者:太空宇宙 更新时间:2023-11-04 06:19:35 25 4
gpt4 key购买 nike

这是我如何显示字符串“dcba”的方式:

main()
{
char s[10] = "abcd";
puts(strrev(s));
}

我如何获得“段错误”的方式(为什么?):

puts(strrev("abcd"));

这是反转字符串的函数:

char *strrev(char *s)
{
int i, j;
char aux;

for(i=0, j=strlen(s)-1; i<j; i++, j--)
{
aux = s[j];
s[j] = s[i];
s[i] = aux;
}

return s;
}

最佳答案

在 C 中,这是因为尝试修改字符串文字是被认为是未定义行为的事情之一。

在原始 C 标准中文字字符串修改被标记为未定义行为的原因(请记住,ANSI/ISO C 标准机构的初衷是编纂现有实践而不是发明一种新语言)是因为某些实现当时存在将字符串文字存储在只读内存中,或共享相同的字符串文字以减少内存使用。

而且,由于该点之后标准的每次迭代都重视向后兼容性(并且一些实现可能仍然优化空间或保护字符串文字免受无意损坏),因此没有真正希望改变它.

底线,未定义的行为通常是不好的,不要这样做。

关于c - 为什么我可以通过传递一个变量而不是传递一个真正的字符串来反转字符串? (简单代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38194440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com