简单的代码,为什么这样赋值不行?

daviddivad 2014-10-24 05:09:27
int main(void)
{
char * str="abcdef";
char * dst;
dst=(char *)malloc(30);
while(*str)
{
*dst++=*str++;
}
printf("%s",dst);
return 0;
}

为什么dst赋值不成功啊?
...全文
182 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hxd198 2014-10-24
  • 打赏
  • 举报
回复
指针*dest赋值后已经在*str内存的后面了 可以定义另外一个指针*p 在while前 p=des; 在while后des=p; p=dest; while(*str) { *res++=*str++; } dest=p;
jhualee1 2014-10-24
  • 打赏
  • 举报
回复
dst=(char *)malloc(30);这句分配空间,就把指针dst指向最后啦
MaX_EsL 2014-10-24
  • 打赏
  • 举报
回复
我是看大神指教的~
li4c 2014-10-24
  • 打赏
  • 举报
回复
1楼是对的
bluesnail1986 2014-10-24
  • 打赏
  • 举报
回复
引用 7 楼 zy1404 的回复:
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
  char * str="abcdef";
  char * dst,*p;
  dst=(char *)malloc(30);
  p=dst;
  while(*str)
    {
      *p++=*str++;
    }
  printf("%s",dst);
  free(dst);

  return 0;
}

++ lz咋会犯这种错误...
  • 打赏
  • 举报
回复
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
  char * str="abcdef";
  char * dst,*p;
  dst=(char *)malloc(30);
  p=dst;
  while(*str)
    {
      *p++=*str++;
    }
  printf("%s",dst);
  free(dst);

  return 0;
}

  • 打赏
  • 举报
回复
int main(void) { char * str="abcdef"; char * dst,*p; dst=(char *)malloc(30); p=dst; while(*p) { *p++=*str++; } printf("%s",dst); return 0; }
hqbobo 2014-10-24
  • 打赏
  • 举报
回复
头指针一般不直接操作 定义一个临时的指过去 再操作临时的
daviddivad 2014-10-24
  • 打赏
  • 举报
回复
怎么让指针回到首地址?而不是通过dst-6的方式
daviddivad 2014-10-24
  • 打赏
  • 举报
回复
哪一句表示dst已经指向了尾部?
罗博士 2014-10-24
  • 打赏
  • 举报
回复
你试试printf("%s",dst-6); 1楼说的很清楚。另外记得free()。
dbzhang800 2014-10-24
  • 打赏
  • 举报
回复
赋值没问题,问题是你的dst 现在已经指向了字符串的屁股。头指针你没保护起来

69,381

社区成员

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

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