程序的输出为什么是这样?

ThinkInDelphi 2005-12-08 09:36:20
#include "string.h"
#include "stdio.h"
static char* fullpath;
int main(int argc, char* argv[])
{ char *part="second";

fullpath=(char*)malloc(100);
fullpath="first";
//printf("%s\n",part);
printf("%s\n",fullpath);
getchar();

strcat(fullpath,part);
printf("%s\n",fullpath);
getchar();
return 0;
}输出为
first
d
如果我把//去掉,输出正常:
second
first
firstsecond
为什么呢?
...全文
89 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tycool 2005-12-08
  • 打赏
  • 举报
回复
没有咱闪光的机会了 :-)
ThinkInDelphi 2005-12-08
  • 打赏
  • 举报
回复
谢谢大家!
megaboy的回答如此闪光~呵
kobefly 2005-12-08
  • 打赏
  • 举报
回复
oh

sorry
已经都有人说了
kobefly 2005-12-08
  • 打赏
  • 举报
回复
static char* fullpath;
int main(int argc, char* argv[])
{ char *part="second";

fullpath=(char*)malloc(100);
strcpy(fullpath, "fisrt");//fullpath="first";

here, 你的赋值方式不对,你fullpath="first";是将指针fullpath指向了常量字符串"first";
//printf("%s\n",part);
printf("%s\n",fullpath);
getchar();

strcat(fullpath,part);
printf("%s\n",fullpath);
getchar();
return 0;
}
sanhill 2005-12-08
  • 打赏
  • 举报
回复
fullpath=(char*)malloc(100);
fullpath="first";
----------------
代码不对,内存泄漏!可改为
fullpath=(char*)malloc(100);
strcpy(fullpath,"first");
megaboy 2005-12-08
  • 打赏
  • 举报
回复
fullpath="first";
------------------
字符串常量是一个地址,你这样是把一个地址赋予fullpath,fullpath原来的值被抛弃了,内存泄露。再运行strcat(fullpath,part);时,由于fullpath指向一个字符串常量,再链接一个字符串,越界。把fullpath="first"改成这样:

strcpy(fullpath, "first");

healer_kx 2005-12-08
  • 打赏
  • 举报
回复
fullpath=(char*)malloc(100);
fullpath="first";

这两句就非常不妥。

strncpy(fullpath, "first", strlen("first"));

69,370

社区成员

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

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