1、strcat要求输入的两个参数均为“以\0结尾的字符串”。你给出的两个参数均不符合这个要求
2、strcat的运行结果是参数1变成两个字符串的连接,并以\0结尾
要求参数1的空间足够容纳连接之后的字符串并且可写入,你的参数不符合这个要求
(p.s. 楼下给出的程序也不符合这个要求)
没有满足它的要求就调用它,所以你的程序出错了
strcat用于将两个char类型链接,出错一般在于dest数组长度不够导致的越界访问。
原型:extern char *strcat(char *dest,char *src);
功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')。
返回值:返回指向dest的char 类型指针。
例子:
#include
#include
main()
{
char d[20] = "GoldenGlobal";
char* s = "View";
clrscr();
strcat(d,s);
printf("%s",d);
getchar();
return 0;
}
char* cs1 = "Hello "; 你改成char cs1[] = "Hello "; 就会发现没问题了,因为char* cs1 = "Hello ";这样定义时,“hello”是放在只读数据段的,不允许被修改
strcat函数是字符串函数
所谓字符串,就是后面是以‘\0’结尾的 这是字符串的标志 没有这个标志 strcat无法确认这个字符串的长度,必然出错
所以那两个大小要改为6 最后加上'\0'
#include
#include
#include
#include
void main(){
//char* cs1 = "Hello ";
char* cs1 = (char*)malloc(sizeof(char)*6);
*cs1 = 'H';
*(cs1+1) = 'e';
*(cs1+2) = 'l';
*(cs1+3) = 'l';
*(cs1+4) = 'o';
*(cs1+5) = '\0';
char cs2[6] = {'w','o','r','l','d','\0'};
strcat(cs1,cs2);
printf("%s\n",cs1);
system("pause");
}
strcat处理的字符串,都必须有结束标记的 后面必须带一个'\0'
还有就是
*(cs1+1) 你没赋值
#include
#include
#include
#include
int main(){
//char* cs1 = "Hello ";
char* cs1 = (char*)malloc(sizeof(char)*11);
*cs1 = 'H';
*(cs1+1) = 'e';
*(cs1+2) = 'l';
*(cs1+3) = 'l';
*(cs1+4) = 'o';
*(cs1 + 5) = 0;
char cs2[6] = {'w','o','r','l','d', '\0'};
strcat(cs1,cs2);
printf("%s\n",cs1);
free(cs1);
system("pause");
return 0;
}
cs1 cs2 数组空间不够哦 没有结束标志
cs1[1]未赋值 (从0开始 *cs1就是*(cs + 0))
cs1未释放空间 free(cs1);