vs2022运行strcpy函数报错问题

img

img

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

img

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,字符串拷贝要全