一、用下标手动给字符数组赋值
-
先给字符数组赋值,并且手动添加结束标志0x0或者'\0' 都表示一字节十六进制数0x0;最后使用%s打印 #include "stdafx.h"
struct Test{
char arr[10];
};
void main(int argc,char* argv[]){
Test t;
t.arr[0] = 'z';
t.arr[1] = 'j';
t.arr[2] = 'j';
t.arr[3] = '\0'; //手动赋值时,如果只赋值zjj三个字节数据,那么最后一定要加一个0x0表示结尾,不然后面使用%s打印会打印出来分配给数组的arr[3] 到 arr[9]内存空间中的垃圾数据cc..(烫烫烫...)
printf("%s",t.arr);
}
有一个疑问?为什么在结构体中定义char类型的数组,在定义了Test t为t.arr分配内存时,不是挨着从栈顶的低地址开始,而是要空出来两字节内存,从[ebp - 3]开始存储
二、通过strcpy给赋值
-
通过C语言内置的别人写好的函数调用传参来给字符数组赋值 #include "stdafx.h"
#include "string.h" //一定要先告诉编译器,strcpy这个函数哪里来的,就是从这个string.h来的
struct Test{
char arr[10];
};
void main(int argc,char* argv[]){
Test t;
//strcpy(t.arr,"中国");传中文也可以,只是使用GBK两个两个字节的读
strcpy(t.arr,"zjj"); //不用加0了
printf("%s",t.arr);
getchar();
}
三、结构体数组赋值
-
一个数组中还可以存放多个结构体类型元素 #include "stdafx.h"
#include "string.h"
struct student{
int num;
char name[20];
char sex;
int age;
int score;
char addr[30];
};
int main(int argc, char* argv[]){
student stu[10]; //结构体数组
stu[0].num = 1001; //结构体数组赋值
strcpy(stu[0].name,"张三");
stu[0].sex = 'M';
stu[0].age = 20;
stu[0].score = 98;
strcpy(stu[0].addr,"上海");
printf("%d %s %c %d %d %s\n",stu[0].num,stu[0].name,stu[0].sex,stu[0].age,stu[0].score,stu[0].addr);
return 0;
}
四、作业
-
定义一个结构体Monster,能够存储怪的各种信息(至少有一个成员是结构体类型) -
声明一个Monster类型的数组,长度为10 -
编写一个函数,为第二题中的数组赋值 -
编写一个函数,能够通过怪物ID,打印当前这个怪物的所有信息 #include "stdafx.h"
#include "string.h"
typedef struct direction{
int x;
int y;
int z;
float time;
}dir; //定义别名
typedef struct Monster{
char name[10];
int id;
short level;
dir d;
}mon; //定义别名
mon arr[10]; //结构体数组,全局变量
void Func(){ //赋值函数
strcpy(arr[0].name,"风龙");
arr[0].id = 1;
arr[0].level = 10;
arr[0].d.x = 1;
arr[0].d.y = 1;
arr[0].d.z = 1;
arr[0].d.time = 100;
strcpy(arr[1].name,"火龙");
arr[1].id = 2;
arr[1].level = 20;
arr[1].d.x = 2;
arr[1].d.y = 2;
arr[1].d.z = 2;
arr[1].d.time = 200;
strcpy(arr[2].name,"水龙");
arr[2].id = 3;
arr[2].level = 30;
arr[2].d.x = 3;
arr[2].d.y = 3;
arr[2].d.z = 3;
arr[2].d.time = 300;
//......
}
void Func2(int id){ //打印指定id的怪物信息
for(int i = 0;i < 10;i++){
if(arr[i].id == id){
printf("怪物id为%d的怪物信息:\n姓名\tid\t等级\t坐标\t刷新时间\n",id);
printf("%s\t%d\t%d\t(%d,%d,%d)\t%f",arr[i].name,arr[i].id,arr[i].level,
arr[i].d.x,arr[i].d.y,arr[i].d.z,arr[i].d.time);
}
}
}
int main(int argc,char* argv[]){
Func();
Func2(2);
return 0;
}
|