gpt4 book ai didi

c - 为什么 *(str+i) = *(str +j) 在这里不起作用?

转载 作者:太空狗 更新时间:2023-10-29 15:09:53 24 4
gpt4 key购买 nike


void reverse(char *str){
int i,j;
char temp;
for(i=0,j=strlen(str)-1; i<j; i++, j--){
temp = *(str + i);
*(str + i) = *(str + j);
*(str + j) = temp;
printf("%c",*(str + j));
}
}


int main (int argc, char const *argv[])
{
char *str = "Shiv";
reverse(str);
printf("%s",str);
return 0;
}

当我使用 char *str = "Shiv"时,我的反向函数的交换部分中的行,即 str[i]=str[j] 似乎不起作用,但是如果我将 str 声明为 char str[] = "Shiv”,交换部分有效吗?这是什么原因。我对这种行为感到有点困惑,当我尝试运行该程序时,我不断收到“总线错误”消息。

最佳答案

当您使用 char *str = "Shiv"; 时,您不拥有指向的内存,并且您不能写入它。字符串的实际字节可以是程序代码中的常量。

当您使用 char str[] = "Shiv"; 时,4(+1) 个字符字节和数组本身都在您的堆栈中,您可以将它们写入为随心所欲。

关于c - 为什么 *(str+i) = *(str +j) 在这里不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1562515/

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