用vs2022 strcpy函数报错运行不了 我用那个#define _CRT_SECURE_NO_WARNING加strcpy也不行
下面是我的理解,供参考:
因为a1初始化时,系统根据初始化的字符串来分配a1的长度,所以如果a1其初始化长度小于a2,使用strcpy()复制字符串时,会数组越界,然后报错了;
将a1定义为一个长度合适的字符数组即可。
测试如下:
参考链接:
#include <stdio.h>
#include <string.h>
int main(void){
// https://blog.csdn.net/Jzandth/article/details/82563130
// char a1[] = "qwea";
//printf("sizeof(a1)=%d\n",sizeof(a1));
// 定义a1 为一个长度足够的 字符数组,以便能完全复制存储a2中的字符串
char a1[100] ;
char a2[] = "were";
//printf("sizeof(a2)=%d\n",sizeof(a2));
strcpy(a1,a2);
// a1[0]='a';
printf("%s",a1);
return 0;
}
s1 s2指向了字符串常量地址,不能写入
可以写
char s1[100]="qwe";
char s2[100]="were";
strcpy(s1, s2); //或者 strcpy_s(s1,100, s2);
你没有初始化数组的长度,拷贝的时候不知道拷贝数组的长度,当然会报错
这样改
char a1[5] = "abc";
char a2[] = "abcd";
strcpy_s(a1, strlen(a1)+2 ,a2);
printf("%s", a1);
只要定义拷贝函数的长度就行,而且要是能放下被拷贝数组的长度,a2的长度为5,至于为什么是加2也是因为a2为5,字符串拷贝要全