¿Por qué hay que usar strcpy o asignar valores uno por uno cuando el arreglo se inicializa sin asignación?

¿Por qué hay que usar strcpy o asignar valores uno por uno cuando el arreglo se inicializa sin asignación?

#include <stdio.h>
#include <string.h>

struct student
{
    
    
	int num;
	char name[20];
	short age;
}stu1;

int main(int argc, const char *argv[])
{
    
    
	char name[4] = "冯";
	printf ("%s \n",name);
	/* 
	 当声明变量stu3的时候,编译器分配了字符数组的
	 空间,但是因为数组的变量名是一个被const修饰
	 		相当于:char * const name;
	 的指针常量;所以只有三种赋值方式:

	 1.在声明结构体变量初始化的时候直接赋值,如:
			struct student stu2 = {888888,"Fengyuchen",8};
	   我认为初始化赋值的过程类似于使用了strcpy函数;

	 2.使用strcpy函数将字符串cp到数组指针所指向的
	 空间内;如:
			strcpy(stu3.name,"Fengyushen");

	 3.一个一个的手动赋值;如:
	 		stu1.name[0] = 'F';
	 		stu1.name[1] = 'e';
	 		stu1.name[2] = 'n';
					.
					.
					.
	*/	
	struct student stu2 = {
    
    888888,"Fengyuchen",8};
	struct student stu3;
	printf("%p  %p  %p  %p\n",&stu2,&stu2.num,&stu2.name,&stu2.age);
	printf("%p  %p  %p  %p\n",&stu3,&stu3.num,&stu3.name,&stu3.age);
	stu3.num = 666666;

	strcpy(stu3.name,"Fengyushen");
	stu3.age = 4;

	printf("%d  %s  %d\n",stu2.num,stu2.name,stu2.age);
	printf("%d  %s  %d\n",stu3.num,stu3.name,stu3.age);

	return 0;
}

//***************
//resultado de salida
//**************
inserte la descripción de la imagen aquí

Análisis de causa:
inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/m198984/article/details/103845239
Recomendado
Clasificación