c中strcat函数出错的原因

2025-03-07 01:55:33
推荐回答(5个)
回答1:

1、strcat要求输入的两个参数均为“以\0结尾的字符串”。你给出的两个参数均不符合这个要求

2、strcat的运行结果是参数1变成两个字符串的连接,并以\0结尾
要求参数1的空间足够容纳连接之后的字符串并且可写入,你的参数不符合这个要求
(p.s. 楼下给出的程序也不符合这个要求)

没有满足它的要求就调用它,所以你的程序出错了

回答2:

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;
}

回答3:

char* cs1 = "Hello "; 你改成char cs1[] = "Hello "; 就会发现没问题了,因为char* cs1 = "Hello ";这样定义时,“hello”是放在只读数据段的,不允许被修改

strcat函数是字符串函数
所谓字符串,就是后面是以‘\0’结尾的 这是字符串的标志 没有这个标志 strcat无法确认这个字符串的长度,必然出错
所以那两个大小要改为6 最后加上'\0'

回答4:

#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) 你没赋值

回答5:

#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);