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

strcat( ) 连接字符串时遇到的几个问题
本帖最后由 abclovem 于 2013-09-06 10:58:38 编辑
#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),程序运行结果为乱码;
为什么会这样呢? 搞不明白。。

------解决方案--------------------
使用(2),程序运行出现内存不可写;
因为2时指针指向的常量,不可修改。所以出现不可写提示。

使用(4),程序运行结果为乱码;
我看你的程序中4只分配了内存,但没有往里面存东西。。。
------解决方案--------------------
strcat_s
strncat
strncat_s
------解决方案--------------------

2 出错
  常量字符串,存放在静态区,不能修改,只是可读
4 乱码
  calloc分配空间的时候会帮你作清空操作,但是malloc不会,要自己手动清空
  memset(a, '\0', 10);

------解决方案--------------------
坛子里大量类似的帖子
------解决方案--------------------
最近经常有童鞋打 修改常量字符串 的主意
------解决方案--------------------
搜索下“常量字符串” 看看
char *a = "ab"; //这种就是常量字符串
------解决方案--------------------
malloc后,不同平台可能给不同的初始化值,假如没有初始化,它就是随机的一串的内容(刚好没有'\0')时,你再strcat,就可能出错。
malloc后,先初始化一下再用