char s[] 与 char *s 的区别?

sunloverkun sunloverkun 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
大家好,我有个问题无法解决,请大家指教。
问题:将一个字符串中的每一个字母变为其下一个字母,例如字符串“abcd”将变为“bcde”。
正解:

int main(int argc, char* argv[])
{

char str[]="abcd";

for(int i=0;str[i];i++)
{
if(str[i]=='z')
str[i]='a';
else
str[i]++;
}

printf("%s\n",str);

return 0;
}

编译程序后,结果为“bcde”,运行正常。
错解:
如果我使用如下代码:

int main(int argc, char* argv[])
{

char *str="abcdef";

for(int i=0;str[i];i++)
{
if(str[i]=='z')
str[i]='a';
else
str[i]++;
}

printf("%s\n",str);

return 0;
}

程序编译无错,但执行出错。经单步调试后,发现当使用 char *str=“abcd”定义后,str[i]++ 这句话有错误。
问题:
char str[]和char *str 有何区别?我一直认为它们都可以当做数组来处理,其中的每个字符都可以当做数组元素来处理,那么出现上述问题该如何解释?谢谢大家解决我的困惑。
...全文

相关推荐

评论 14
收藏 已收藏
分享
返回顶部
sunloverkun
C语言 70,039 成员 243,237 内容