Chinaunix首页 | 论坛 | 博客
  • 博客访问: 155723
  • 博文数量: 44
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 407
  • 用 户 组: 普通用户
  • 注册时间: 2015-11-10 13:28
个人简介

仰望星空

文章分类
文章存档

2016年(22)

2015年(22)

我的朋友

分类: C/C++

2015-12-02 19:10:48

    编了个结构体数组做参数的程序,结果在对结构体数组的字符串变量做初始化的时候出了问题,这个字符串不能使用数组来初始化话,要不然是会出错的,只能使用指针来进行初始化。
    程序如下:

点击(此处)折叠或打开

  1. /*结构体数组或指针做参数--地址传递*/
  2. #include <stdio.h>
  3. #include <string.h>

  4.     struct student
  5.     {
  6.         char *Num;
  7.         int nu;
  8.     };

  9. int putout(struct student s[])
  10. {
  11.     int i;
  12.     for(i = 0; i < 3; i++)
  13.     {
  14.         printf("%s\n",s[i].Num);
  15.     }
  16. }


  17. int main()
  18. {

  19.     struct student stu[3];

  20.     stu[0].Num = "zhangsan"; //char型数组得这样初始化
  21.     stu[1].Num = "lisi"; ///////????为什么使用数组回出错????? stu[1].Num[10] = "zhangsan";
  22.     stu[2].Num = "wangwu";

  23.     printf("%s\n",stu[0].Num);

  24.     putout(stu);

  25. }
按理说定义一个数组,并且使用这种形式stu[1].Num[10] = "zhangsan";来初始化应该是没有什么问题的,但是老是打印乱码,为此我特意编写了一个小程序来做测试。终于找到问题了,其实是一个细节的问题,其实stu[1].Num[10] = "zhangsan";这句根本不是定义的时候初始化,其定义在结构体中就定义好了,所以字符数组是不能这么直接赋值的,而下边这个小程序是定义的一开始就进行了初始化,所以是没有什么问题的,如下:

点击(此处)折叠或打开

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

  3. int main()
  4. {
  5.     char Num[10] = "zhousan";
  6.     printf("%s\n",Num);
  7.     return 0;
  8. }
程序正常打印,是没有什么问题的。。。。。
阅读(3768) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~