很诡异的一个函数

fengyindiehun 2009-03-29 03:12:16
今天无聊写了一小段代码,很简单,就是把一个字符串倒置,代码如下:
#include
void fun(char *a)
{
int i;
char temp;
int n=strlen(a);
for(i=0;i
{
temp=*(a+i);
*(a+i)=*(a+n-1-i);
*(a+n-1-i)=temp;
}
}
int main()
{
char a[5]="abcs";
fun(a);
printf("%s",a);
return 0;
}
但奇怪的是在main函数中,把char a[5]="abcs"换成char *a="abcs"却不能运行,strlen函数本来就是接受字符串的首地址,为什么换成指针就不行了呢?甚是奇怪!
...全文
96 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
chen_jun_fen 2009-03-30
  • 打赏
  • 举报
回复
agree with floor 2
yuri2008 2009-03-29
  • 打赏
  • 举报
回复
*(a+i)=*(a+n-1-i);
*(a+n-1-i)=temp;
这里是不对的,因为你传进去的指针指向的是个字符串常量,你对它进行赋值怎么可以呢。
ljhhh0123 2009-03-29
  • 打赏
  • 举报
回复
char a[5]="abcs";
char *a="abcs";
明确的告诉你,
第一个字符串是存储在进程的可读写内存.
第二个字符串是存储在进程的只读内存.
这都是C语言编译器输出二进制执行文件通常的实现方式.

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧