C语言执行时报错
- “表达式必须是可修改的左值,无法从“const char [3]”转换为“char [120]” ”,
原因:
- 字符串不能直接赋值
解决该问题的方法:
- 使用strcpy函数进行字符串拷贝
- 原型声明:
char *strcpy(char* dest, const char *src);
- 头文件:
#include <string.h>
和#include <stdio.h>
- 功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
- 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。
// testArray.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include "string.h"
#define MAX_AGE_SIZE 120
#define MAX_NAME_SIZE 100
typedef enum{//枚举值定义
walking = 1,
running = 2,
swimming = 3,
jumpping = 4,
sleeping = 5
}Hobby;
typedef enum{
Chinese = 1,
English = 2,
Japanese = 3
}Language;
typedef struct People{//结构体定义
union{//联合体定义,使用方法和struct类似
struct{
char age[MAX_AGE_SIZE];
char name[MAX_NAME_SIZE];
}Child;
Hobby hobby;
Language language;
}Student;
}People;
int _tmain(int argc, _TCHAR* argv[])
{
char name1[MAX_NAME_SIZE] = {"test1"};
char name2[MAX_NAME_SIZE] = {"test2"};
People p[2];
//p[0].Student.Child.age = "10";//报错:表达式必须是可修改的左值(原因:字符串不能直接赋值 )
strcpy(p[0].Student.Child.age,"10");//使用strcpy函数实现字符串拷贝
strcpy(p[0].Student.Child.name,name1);
p[0].Student.hobby = walking;
p[0].Student.language = Chinese;
strcpy(p[1].Student.Child.age,"12");
strcpy(p[1].Student.Child.name,name2);
p[1].Student.hobby = running;
p[1].Student.language = English;
printf("Student1's name:%s\n",p[0].Student.Child.name);
return 0;
}