strcat( ) 连接字符串时遇到的几个问题

abclovem 2013-09-06 10:55:20
#include<stdio.h>
#include<string.h>
#include<malloc.h>
int main()
{
char a[8] = "ab";//(1)
// char *a = "ab";//(2)
// char *a = (char*)calloc(1, 10); //(3)
// char*a= (char*)malloc(10); //(4)

char *b = "cd";


printf("%s\n", strcat(a, b));//(0)
// printf("%s\n", strcat(a, NULL));
// free(a);
}


使用(1),程序运行没有问题;
使用(2),程序运行出现内存不可写;
使用(3),程序运行没有问题;
使用(4),程序运行结果为乱码;
为什么会这样呢? 搞不明白。。
...全文
344 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xinhua0910 2013-09-08
  • 打赏
  • 举报
回复
malloc后,不同平台可能给不同的初始化值,假如没有初始化,它就是随机的一串的内容(刚好没有'\0')时,你再strcat,就可能出错。 malloc后,先初始化一下再用
xinhua0910 2013-09-08
  • 打赏
  • 举报
回复
搜索下“常量字符串” 看看 char *a = "ab"; //这种就是常量字符串
max_min_ 2013-09-06
  • 打赏
  • 举报
回复

2 出错
  常量字符串,存放在静态区,不能修改,只是可读
4 乱码
  calloc分配空间的时候会帮你作清空操作,但是malloc不会,要自己手动清空
  memset(a, '\0', 10);
赵4老师 2013-09-06
  • 打赏
  • 举报
回复
strcat_s strncat strncat_s
  • 打赏
  • 举报
回复
使用(2),程序运行出现内存不可写; 因为2时指针指向的常量,不可修改。所以出现不可写提示。 使用(4),程序运行结果为乱码; 我看你的程序中4只分配了内存,但没有往里面存东西。。。
modyaj 2013-09-06
  • 打赏
  • 举报
回复
最近经常有童鞋打 修改常量字符串 的主意
AnYidan 2013-09-06
  • 打赏
  • 举报
回复
坛子里大量类似的帖子

70,012

社区成员

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

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