怎么给结构体 二维数组中的二维字符型数组赋值?

“ 畅学电子 ” 一键关注,轻松学习电子知识畅学电子网·订阅号每天更新电子行业技术文章,及单片机最新资讯,随时随地轻松学习现有一个问题想高手请教,见程序struct student {char name[15];};struct student Zmemset (&Zhangsan, 0, sizeof(Zhangsan));//现要给结构体Zhangsan赋值, 学号为7, 姓名为ZhangsanZhangsan.num = 7;strcpy(Zhangsan.name, &Zhangsan&); /*想请问高手,1.为什么要这样? 2. strcpy()的两个参数都是字符指针,这样为什么不报错?*/char *strcpy(char *dst, const char *src){char *cp =while(*cp++ = *src++);}----------------------------Zhangsan.name大概等同于&Zhangsan.name[0] 所以说是对的----------------------------那请问这么使用strcpy()函数对吗?函数原型说明时定义的参数可是两个字符指针,可以直接使用字符串吗?----------------------------这样用是对的。直接用字符串也是对的,系统处理为静态指针----------------------------那请问这么使用strcpy()函数对吗?函数原型说明时定义的参数可是两个字符指针,可以直接使用字符串吗? 不但这样是正确的, 连下面这样都是正确的!printf(&%c\n&, 2[&abcde&]);printf(&%c\n&, &abcde&[4]);-----------------------------呵,开门见山的说:Zhangsan.name 和 &Zhangsan&的类型都是char *!现在给你一一解释。1.Zhangsan.namechar name[15]做了这样一件事:他在进程的堆栈空间里分配了15个连续的char类型空间,并让指针name指向这段空间的第一个位置。既然name指向第一个位置,它当然是char *类型了。在C语言里,数组和指针是不分家的。建议楼主认真阅读《The C Programming Language:第五章 指针与数组》(PS:你看看,Kernighan和Ritchie把指针和数组都归在一章里了,可见它俩之间的关系有多紧密。)2.&Zhangsan&这个比较复杂,容我细细道来。&Zhangsan&是字符串,不错!但是它不是一般的字符串,它是字符串常量。所谓常量,就是在编译阶段就可以确定其值,并不会改变其值那一类变量。一段C程序被编译成机器码以后,当它执行的时候,内存是这样分配的:如图:代码区就是C代码被编译以后的机器代码;栈区用来分配函数内的自动变量;堆区用来分配全局的可变变量(注意!“可变变量”这个词是我自造的,其实可变变量就是一些全局的空间,这些空间的内容是可以被改变的。)。那么,静态数据区是干什么的呢?答:它用来存放那些内容不可改变的变量的(说白了,这些变量就是常量!)。所以呢,针对下面代码代码,变量分配是这样的:intmain(intargc,char*argv[]){structstudent Zmemset(&Zhangsan,0,sizeof(Zhangsan));Zhangsan.num=7;strcpy(Zhangsan.name,&Zhangsan&);return0;}堆区:Zhangsan栈区:argc,argv静态数据区:&Zhangsan&so,&Zhangsan&字符串是无名的。&Zhangsan&自己就是自己的名字——它的类型就是char*.呵呵,说的有点悬乎!总结一句:字符串常量的值就是该字符串常量的首字符地址!强调一句:字符串常量的在静态数据区,其内容是不能被改变的!(strcpy( &Zhangsan&,string)是个严重的错误哦!)~完~& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &如何分享到朋友圈点击右上角
在弹出菜单选择
分享到朋友圈如何关注 & 畅学电子 &1. 在微信上点击右上角”+& 点击“添加朋友& → 在&查找公众号&里搜索& 畅学电子 &即可查找并关注2. 搜索微信号& 畅学电子 &也可查找并关注我们如何查看往期的历史消息点击右上角图标进入&账号资料& → &查看历史消息&畅学电子订阅号微信名:畅学电子每天更新电子行业各种知识,及单片机最新资讯,来开启你的视觉盛宴吧畅学电子服务号微信名:畅学电子一个新型的知识分享平台,在线查看畅学电子网的最新文章、在线视频等,带你进入电子工程师技术开发学习的世界==& 前往
学习更多知识! 
 文章为作者独立观点,不代表微头条立场
的最新文章
你在愁你的四轴飞行器怎样调整pid都飞不起来吗?那就一定不是pid的。我也苦苦调了三个星期,毫无进展,当发现如今充电宝已经成为了数码一族们出行时常备的随身充电产品。在实际使用中,当智能手机或平板电脑等数码产&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结模电想必是电子专业的学生头疼的一门课程了。小编用一句话形容一下:"老师说第一遍不懂,第二遍还是不懂,第三遍还电子技术、无线电维修技术绝不是一门容易学好、短时间内就能够掌握的学科。这门学科所涉及的方方面面很多,各方面又本篇文章介绍了在逻辑IC中CMOS和TTL出现多余输入端的解决方法,并且对每种情况进行了较为详你家里是否有一个电视机遥控器或者空调机遥控器呢?你是否也想让它遥控其他的电器甚至让它遥控您的课程详情:
《畅学智能循迹小车实战教程》由畅学电子专业的电子工程师团队设计规划,并独家录制。本课程主话说,小明、小强、小刚、小东和小基都是同一院里长大的,从小就光着屁股一起玩,结下了深厚的情谊,这份兄弟情,一一.工程师眼中的“嵌入式系统”在工程师看来:着重理解“嵌入”的概念,主要从三个方面来理解:1.从硬件上,将基过压保护压敏电阻器是很多工程师都非常熟悉的一种电子元件就,尤其是在LED开关电源或大功率的电源设备中,更是非1.PIC12F629仅有一个中断入口,要避免多个中断引发的冲突。2.引脚电平变化触发中断,和外部INT中断一、区分指令的大小写编写PIC单片机的源程序,除了源程序的开始处需要严格的列表指令外,还须注意源程序中字母符市场出售的一款电动车蓄电池修复器,经使用效果并不明显。剖析了一下其电路构成,发现其修复用高压高频脉冲靠震荡电在电子产品开发与维修中.在考虑其成本,或确认一块集成电路损坏后,通常要找一个与原器件的规格、型号一致的集成块坏习惯——ADS Coding Style继续coding...建立工程,编辑源文件,把文件加入工程,设置工1 .用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECO问题1:什么是零件封装,它和零件有什么区别?答:(1)零件封装是指实际零件焊接到电路板时所指示的外观和焊点位大家可能开始学单片机都是学的STC的单片机,因为它不需要用什么编程器就可以直接烧写,但我看到还是有人在烧写时出现如此错误:FATAL ERROR L210: I/O ERROR ON INPUT FILE: EXCE今天在论坛里看到一位坛友设计分享上来的PCB四层板,看到他在铺铜的处理上有一些特别,如图: 图1.表层只铺了对于老鸟,我建议直接看那两个表达式,然后自己想想就会懂的了,也不需要听我后面的自吹自擂了,我可没有班门弄斧的所有STM32的芯片都提供对Flash的保护,防止对Flash的非法访问--写保护和读保护。读保护是作用于整翻转一个字符串,例如把"12345"变成"54321",这是一个最简单的不过的编码任务,即便是C语言初学者的我用的EPM3128ATC100-10这个芯片虽然是一个简单的电路,但是希望高手们给点指点。哪怕是用一个小小的元件入手。。课程详情:本课程主要通过典型实例的形式,以51单片机的系统设计为主线,结合软件和硬件,由浅入深、通俗易懂地介题目描述:对于一个字节(8bit)的无符号整形变量,求二进制表示中“1”的个数,要求算法执行效率尽可能地高。下面是个网上广泛流传的单片机音乐演奏程序,它可以循环的播放“世上只有妈妈好”这首乐曲。很多人都关心如何修改这课程详情:《畅学智能循迹小车实战教程》由畅学电子专业的电子工程师团队设计规划,并独家录制。本课程主要通过智能51单片机具有两条查表指令,用于从 ROM 中读出预存的数据:MOVC A, @A + PCMOVC A,1 sizeof(int)*p表示什么意思?留几个问题(讲解指针与数组时会详细讲解),32位系统下:int;利用超声波测距,都是统计超声波发出_到_接收的时间,然后再换算成距离;对于时间的统计,通常都是使用计数器完51单片机具有两条查表指令,用于从 ROM 中读出预存的数据:MOVC A, @A + PCMOVC A,51单片机具有两条查表指令,用于从 ROM 中读出预存的数据:MOVC A, @A + PCMOVC A,51单片机具有两条查表指令,用于从 ROM 中读出预存的数据:MOVC A, @A + PCMOVC A,51单片机具有两条查表指令,用于从 ROM 中读出预存的数据:MOVC A, @A + PCMOVC A,51单片机具有两条查表指令,用于从 ROM 中读出预存的数据:MOVC A, @A + PCMOVC A,如果是驱动led,那么用1K左右的就行了。如果希望亮度大一些,电阻可减小,最小不要小于200欧姆,否则电流太先说说电压,根据前人的经验和我自己使用的经验,对于低频电路,op放大器的电源一般选用±12V,这个电压在市场本课程内容详尽,实例丰富,非常适合作为单片机及编程初学者的学习课程,也可作为大中院校相关专业在校学生及毕业生这次电路板测试时,发现一块电路板总是烧不进程序。遂予以检查:1、电源,地都没有问题2、用示波器测晶振是否起振C语言的最大特点是:功能强、使用方便灵活。C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留点击“蓝字”关注后回复数字{999}查询维修、保养、案例!小编微信:df4slm QQ:第1 招:以空间换时间计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率前段时间调试一个很简单的IIC总线程序,程序编译通过了,但是在软件仿真调试的时候发现,不按照自己设定的程序跳[问]:1、电阻电容的封装形式如何选择,有没有什么原则?比如,同样是 104 的电容有 changxuedianzi谢谢关注畅学电子网,让我们一起开启知识的大门吧!热门文章最新文章changxuedianzi谢谢关注畅学电子网,让我们一起开启知识的大门吧!对结构体中字符串指针和字符数组赋值的区别是什么?
[问题点数:40分,结帖人simonlight90]
对结构体中字符串指针和字符数组赋值的区别是什么?
[问题点数:40分,结帖人simonlight90]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2015年11月 扩充话题大版内专家分月排行榜第一2015年7月 扩充话题大版内专家分月排行榜第一2015年1月 扩充话题大版内专家分月排行榜第一2014年9月 扩充话题大版内专家分月排行榜第一(补)2013年9月 扩充话题大版内专家分月排行榜第一2013年8月 扩充话题大版内专家分月排行榜第一2013年7月 扩充话题大版内专家分月排行榜第一
2015年12月 扩充话题大版内专家分月排行榜第二2015年6月 扩充话题大版内专家分月排行榜第二2015年2月 扩充话题大版内专家分月排行榜第二2014年10月 扩充话题大版内专家分月排行榜第二2014年8月 扩充话题大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。C语言中怎样定义一个字符型的二维数组赋值并输出啊?_百度知道
C语言中怎样定义一个字符型的二维数组赋值并输出啊?
#include&stdio.h&#define&M&5#define&N&3void&main(){ int&i,j; char&c[M][N]={'H','e','l','l','o','&','c','!'};//定义数组 for(i=0;i&M;i++)//输出数组
for(j=0;j&N;j++)
printf(&%c&,c[i][j]); printf(&\n&);}
其他类似问题
为您推荐:
helloworld&;},不浪费内存char *str[]={&quot最好定义一个指针字符数组;hello&quot,&quot
str[3][20]={&hello&,&world&,&hello world&}3代表有三个字符串,20代表每个字符串的最大长度,/0不用加,是字符串的话自己会加上去的
char *str={&hello&,&helloworld&};
char str[30][30]={&hello&,&hello world&};
二维数组的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁小木虫 --- 500万硕博科研人员喜爱的学术科研平台
&&查看话题
【求助】C# 中如何声明结构体数组并赋值
我声明了一个结构体
public struct Str
& && && && &
& && && && &public char&&s;
并声明了一个变量Sa,
&&public&&Str&&Sa=new S
对其进行赋值;老提示说索引超出数组界限
for(int i=0;i<C;i++)
& && && && &{
& && && && && & Sa.id=i;
& && && && && & Sa.s=S;& &
& && && && &}
其中S是一个字符串,C是S字符串的长度
看了看你的代码,可能是C的赋值问候,后面数组引用时查过了数组的范围,lZ最好把代码写详细一点,报错信息也说详细点,特别是C你是怎么赋值的
我自己按照你的说法写了个小程序.
namespace Test1
& & class Program
& && &&&public struct Str
& && && && &
& && && && &
& && &&&static void Main(string args)
& && && && &Str strs = new S
& && && && &string s = "hello";
& && && && &int n = s.L
& && && && &for (int i = 0; i < i++)
& && && && &{
& && && && && & strs.id =
& && && && && & strs.s = s;
& && && && &}
& && &&&System.Console.WriteLine(strs.id.ToString());
& && && && &System.Console.ReadLine();
楼主看加粗的哪一行,如果你使用赋值后的数组的话,记住数组下标,从0-(n-1)是合法的,如果是n 的话,就会出现索引出错的错误.这个问题应该没什么难度,楼主仔细查查你自己的程序吧.
谢谢回复,我已经找着问题的所在了。根本不在赋值这块,而在声明那句C上,C在一开始的默认值是0,当然会老提示超出索引了……
public struct Str
& && && && &
& && && && &
自己定义的的结构体,然后再定义了一个Sa数组,类型就是Str
那也应该是 Sa.id 啊
Sa是一个数组啊,你有可能没看完代码
研究生必备与500万研究生在线互动!
扫描下载送金币}

我要回帖

更多关于 结构体 二维数组 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信