字符指针作strcat函数的实参,编译成功,但是运行出错,why?

lufei1106 2010-04-01 09:05:34
这是有问题的程序代码:

#include<stdio.h>
#include<stdlib.h>
#include <string.h.>
main()
{
char *a="This is ";
char *b="a test.";
printf("%s\n",strcat(a,b));
system("pause");
}

如果把上输代码中的字符指针换成字符数组就能成功运行:

#include<stdio.h>
#include<stdlib.h>
#include <string.h.>
main()
{
char a[]="This is ";
char b[]="a test.";
printf("%s\n",strcat(a,b));
system("pause");
}

strcat函数的原型不就是char *strcat(char *str1,char *str2);吗?
那为什么字符指针做实参就不行呢?
...全文
250 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lufei1106 2010-04-02
  • 打赏
  • 举报
回复
学习了

[Quote=引用 7 楼 tianweishuiguo 的回复:]
char *a="This is ";//这个在常量区分配一个空间,然后a指向此空间
char a[] = "This is"//这个在常量区分配一个空间,然后又在栈上分配一个空间,将常量区的内容复制过来,所以可以修改
[/Quote]
东大坡居士 2010-04-01
  • 打赏
  • 举报
回复
char *a="This is ";//这个在常量区分配一个空间,然后a指向此空间
char a[] = "This is"//这个在常量区分配一个空间,然后又在栈上分配一个空间,将常量区的内容复制过来,所以可以修改
outpainfo 2010-04-01
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>
#include <string.h.>
main()
{
char *a="This is ";
char *b="a test.";
printf("%s\n",strcat(a,b));
system("pause");
}


把上面 <string.h.> 后面的点去掉。好像我运行了下,可以 哈。。
结果会出来 This is a test.
Steven_0610 2010-04-01
  • 打赏
  • 举报
回复
学习了. .........................
Thirty 2010-04-01
  • 打赏
  • 举报
回复

原型:extern char *strcat(char *dest,char *src);

用法:#include <string.h>

功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。

说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。

虽然dest类型都是char *,但是前者你是修改了字符串常量肯定不行了
stardust20 2010-04-01
  • 打赏
  • 举报
回复
char a[]="This is ";//这边分配的内存太小了。。。正好把This is 还有结束符存了。。后面再追加已经没内存了。。所以出错
char b[]="a test.";
printf("%s\n",strcat(a,b));
yuzl32 2010-04-01
  • 打赏
  • 举报
回复
char *a="This is "; //a指向字符串常量
char *b="a test."; //b指向字符串常量
strcat(a,b); //修改a指向的空间,由于a指向常量区,因此失败。
dubiousway 2010-04-01
  • 打赏
  • 举报
回复
常量字符串,常量,原则自然不能改变的

69,336

社区成员

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

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