读书人

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

发布时间: 2013-09-11 16:26:28 作者: rapoo

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后,先初始化一下再用

读书人网 >C语言

热点推荐