heblhc 发表于 2015-12-12 19:09:46

结构体赋初值问题

我在学c语言的结构体一章,看了小甲鱼老师的视频后自己写了一个通讯录的小程序,但是在结构体数组的赋值时,两段相同的代码,只是数组长度不同,导致结果就不一样,哪位高手可以帮我看看是为什么?



#include <stdio.h>
void main()
{
        struct book
        {
                char name;
                char tel;
        };
        int i;
        struct book person;
       
        for(i=0;i<3;i++)
        {
                printf("input person %d name \n",i+1);
                gets(person.name);
                printf("input person %d tel \n",i+1);
                gets(person.tel);
               
        }
       
        printf("\t\tname\t\ttelephone\n");
        for(i=0;i<3;i++)
        {
                printf("\t%s\t\t%s\n",person.name,person.tel);
        }
}
结果

如果把char tel的长度改为char tel,结果就是

我定义的数组长度小为什么输出tel后还加上了name,定义长了反而没有了呢。求助各位,谢谢啦!

heblhc 发表于 2015-12-12 19:15:13

晕了,少上传了一张图,当char tel时,结果是这样的
                           name                              telephone
                         wang                        13911112222li
                        li                              12822223333zhou
                        zhou                        13588880000
不能上传图片了,只好打字了

Run_Feng 发表于 2015-12-12 19:51:51

不要用gets获取键盘输入,容易溢出,用fgets代替

heblhc 发表于 2015-12-12 22:00:28

谢谢了,主要是我搞不懂为什么会是这个结果

vividzheng10010 发表于 2015-12-13 11:32:03

本帖最后由 vividzheng10010 于 2015-12-14 10:40 编辑

因为字符串会有结束符('\0');所以定义char tel长度为12
手机号11位+'\0'

heblhc 发表于 2015-12-13 14:08:31

谢谢啦!
页: [1]
查看完整版本: 结构体赋初值问题