C语言中,定义c语言 结构体变量问题

&&问题点数:0&&回复次数:6&&&
结构体中定义的字符数组怎么初始化的问题
结构体中定义的字符数组存好数据后,剩余的尾部不是空的,总是有些无关的数据在后面的空余部分,是怎么回事呢
搜索更多相关主题的帖子:
来 自:ShangHai
等 级:蜘蛛侠
帖 子:2107
专家分:1364
以下是引用etsunny在 22:49:24的发言:结构体中定义的字符数组存好数据后,剩余的尾部不是空的,总是有些无关的数据在后面的空余部分,是怎么回事呢
struct st {
char name[21];};
struct st co = {
/* C 中的字符串是以空字符结尾的 */
name 的内容 {'c', 'o', 's', 'd', 'o', 's', '\0', ....剩余的数据是未知的.....}
—&〉Sun〈&—
等 级:新手上路
帖 子:40
struct st {
char name[21];}; input (){int i=0;while(i!=21)
scanf("%d,%c\n",&i,&ch);
if(0&i&19)
struct.name[i]=
}}output (){输出该字符数组的21个元素}当对数组多次操作时就有问题,
圣火从希腊蔓延,带着普罗米修斯的祝愿
来 自:ShangHai
等 级:蜘蛛侠
帖 子:2107
专家分:1364
以下是引用etsunny在 23:49:09的发言:
struct st {
char name[21];}; input (){int i=0;while(i!=21)
scanf("%d,%c\n",&i,&ch);
if(0&i&19)
struct.name[i]=
}}output (){输出该字符数组的21个元素}当对数组多次操作时就有问题,
这段程序问题还真多//----------------------------------------------------------------------------////
楼下是修改版
////----------------//
[此贴子已经被作者于 0:14:11编辑过]
—&〉Sun〈&—
来 自:ShangHai
等 级:蜘蛛侠
帖 子:2107
专家分:1364
#include &stdio.h&
struct nes{
char name[21];}
/* st 全局结构变量 */
void input(struct nes * st);
/* 函数原型 */void show_nes(struct nes * st);
/* 函数原型 */
//----------------------------------------------////
////--------//
int main(void){
printf("input :\n");
input(&st);
printf("Show :\n");
show_nes(&st);
getchar();
return 0;}
//----------------------------------------------////
////--------//
void input(struct nes * st){
printf("请输入您的 ID 和您的姓名(中间以空格空开):\n");
while(scanf("%d %20s", &st-&num, st-&name) != 2)
while(getchar() != '\n');
printf("请按照要求正确输入!\n");
while(getchar() != '\n');}
void show_nes(struct nes * st){
printf("%d %s\n", st-&num, st-&name);}
[此贴子已经被作者于 0:20:37编辑过]
—&〉Sun〈&—
等 级:新手上路
帖 子:40
还有个问题,华字到了TC里面变样了,输出来怎么不会还原呢,郁闷
圣火从希腊蔓延,带着普罗米修斯的祝愿
等 级:新手上路
帖 子:40
圣火从希腊蔓延,带着普罗米修斯的祝愿
版权所有,并保留所有权利。
Powered by , Processed in 0.027807 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reservedc语言中结构体struct中定义结构体后 成员表中的 name[10]是什么意思_百度知道
c语言中结构体struct中定义结构体后 成员表中的 name[10]是什么意思
提问者采纳
比:struct STUDENTSRECORD{ char name[10];
int age,} mStudent[20];结构name[10]表示结构包含字符型数组名name存放10字符型数据经存放字符串字符串<img class="word-replace" src="/api/getdecpic?picenc=0a5f字符字符&#39;&#92;0&#39;结尾输入1号姓名:scanf(&%s&,mStudent[0].name);输1号姓名:printf(&%s&#92;n&,mStudent[0].name);1号姓名改王伟:strcpy(mStudent[0].name,&王伟&);
提问者评价
太给力了,你的回答完美地解决了我的问题,非常感谢!
其他类似问题
结构体的相关知识
按默认排序
其他3条回答
员name[10] 应该定义名称度10字符
定义一个有10个元素的数组
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C语言里面的typedef struct... | 问答 | 问答 | 果壳网 科技有意思
C语言里面的typedef struct的时候为啥要写两个名称?
代码如下typedef struct tagXX{}XX;就是上面的,为啥不直接struct XX{};呢,或者把tagXX去掉。就是想问,这个tagXX到底是怎么来的呢?
软件工程师,应用数学专业
tagXX是结构体的【本名】,XX是【别名】,无论本名和别名都不是必要的,你甚至可以两个都不要,所以不能说“要写两个名称”,你应该问“为什么可以有两个名称”,“两个名称有什么区别”。传统C语言中,定义结构体的标准语法是:struct tagXX{};tagXX是这个结构体的【本名】。你使用本名定义一个结构体的实例时,必须加上struct:struct tagXX下面的代码是错误的(在传统C语言中):tagXX /* 编译错误!定义结构的实例时必须用struct关键字 */typedef作用是给类创建一个【别名】,下面是你给的代码:typedef struct tagXX{} XX;其实这段代码相当于:struct tagXX{};typedef struct tagXX XX;这里面,tagXX是这个结构体的本名,XX只是struct tagXX的别名。然后你可以用XX来定义变量:XX /*相当于struct tagXX */这样代码更简洁了。实际上定义结构体时使用typedef的话,完全可以在创建别名的同时不给结构体命名:typedef struct{} XX;XX这里,结构体没有了“本名”,剩下XX这个别名,同样可以使用"XX "来定义实例。你甚至可以本名和别名都不要,直接用结构体定义一个实例:struct{}【C++】C++里,用结构定义实例已经不需要struct关键字,例如:struct tagXX {};tagXX //C++里没有问题struct tagXX //兼容C,也没有问题所以,在C++里定义结构体的同时已经不再需要用typedef创建别名。
(C)2013果壳网&京ICP备号-2&京公网安备您还未登陆,请登录后操作!
请问一个关于C语言结构体的问题
请问1指针是不是只能是字符行
2x前面没定义那他是什么类型他有什么用.
3请问指针P在这里是值请问为什么能指向地址.
4比如*p=a;a是int型我认为是正确的,如果*p=&a就是错的.请问我理解的对吗如果不对为什么,如果对那上面*p=&x是怎么回事啊~~
说一说我的理解,如有不正确之处,请大家指正:
1. 任何类型都有指针,如int*,bool*...
2. x前面的那个结构体就是x的类型。x.a就是那个int变量,x.s就是那个char*。
3. p指向的就是变量x的地址,即p->a和x.a是同一块内存。
4. 我不知道我没有没理解你的意思,你所说的*p=a,那是赋值语句,意思是将p所指向的地址的值赋成a的值;而*p=&x那是变量声明语句,意思是定义一个struct的指针,名为p,并且赋初值为x的地址!如果语句是
int *p=&a;
那是正确的,因为第二句是变量声明语句,并赋初值,那个*号是表明p的类型而不是取p地址值的意思,即将int*赋初值为int*,所以是正确的;
---------------------------------------
如果语句是
int *p=&a;
那第三句就不正确了,因为第三句是赋值语句,那个*号是取p地址值的意思,即*p就是一个int,而&a是int*,那么将int赋值为int*当然不正确……
说一说我的理解,如有不正确之处,请大家指正:
1. 任何类型都有指针,如int*,bool*...
2. x前面的那个结构体就是x的类型。x.a就是那个int变量,x.s就是那个char*。
3. p指向的就是变量x的地址,即p->a和x.a是同一块内存。
4. 我不知道我没有没理解你的意思,你所说的*p=a,那是赋值语句,意思是将p所指向的地址的值赋成a的值;而*p=&x那是变量声明语句,意思是定义一个struct的指针,名为p,并且赋初值为x的地址!如果语句是
int *p=&a;
那是正确的,因为第二句是变量声明语句,并赋初值,那个*号是表明p的类型而不是取p地址值的意思,即将int*赋初值为int*,所以是正确的;
---------------------------------------
如果语句是
int *p=&a;
那第三句就不正确了,因为第三句是赋值语句,那个*号是取p地址值的意思,即*p就是一个int,而&a是int*,那么将int赋值为int*当然不正确……
希望对你有帮助……
回答数:124
中分配地址就可以指向,指针变量也可以指向另一个指针变量
2、结构体类型
3、p是指针变量,指针就是内存地址,指针存在指针变量里
4、那是指针定义的同时进行了赋值
比如 int *p=&i; 定义了一个指向整型的指针变量,然后把i的地址赋给指针变量p
这句其实是 int *p; p=&i; 这么两句
您的举报已经提交成功,我们将尽快处理,谢谢!在C语言中如果只声明一个结构体类型,会占用内存吗,请指教,谢谢了_百度知道
在C语言中如果只声明一个结构体类型,会占用内存吗,请指教,谢谢了
如果用声明结构体类型在声明一个结构体变量,但并不初始化,这个结构体变量会占用内存位置吗,感谢了。
声明了一个结构体变量,无论是否初始化,它都要占用内存空间,空间大小为
sizeof(struct name);如果只声明为一个结构指针,那么占用内存空间4字节。sizeof(struct name *);
其他类似问题
按默认排序
其他6条回答
会占用的,只要有变量了,就会申请相应的存储空间。除非只定义结构而没有实例变量定义,才不占内存。
只要你写了什么,都要占内存。如果你问的是编译后的情况,那是不占的。就像你包含了很多很多你的代码用不着的头文件,编译前这些文件都要打开;但编译后的目的码文件的大小却不因你多包含了头文件而增大。
经测试,声明一个结构体与否编译出来的二进制文件大小不会有变化,所以对于第一个问题是不会声明一个变量但不使用也会占用空间,不过不排除编译器会对此进行优化(例如直接抹掉未使用过的局部变量)
会,会自动设成初始值…
声明只是告诉编译器内存怎么分布,不占空间,变量如果不优化就占
你不会动手试试吗。
结构体类型的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 c语言结构体大小 的文章

 

随机推荐