[ZLG-MCU] LM中使用字符串遇到的问题

[复制链接]
2252|7
 楼主| MWEN 发表于 2008-4-23 10:50 | 显示全部楼层 |阅读模式
void&nbsp;f1(char&nbsp;str1[],&nbsp;char&nbsp;str2[])<br />{<br />&nbsp;uint8&nbsp;i=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;while(str2!='\0')<br />&nbsp;{<br />&nbsp;str1=str2;<br />&nbsp;i++;<br />&nbsp;}<br />}<br /><br />void&nbsp;f2(char&nbsp;*str1,&nbsp;char&nbsp;*str2)<br />{<br />&nbsp;for&nbsp;(;*str2!='\0';str1++,str2++)<br />&nbsp;&nbsp;&nbsp;*str1&nbsp;=&nbsp;*str2;&nbsp;&nbsp;&nbsp;//不会将str2的复制到str1<br />}<br /><br />void&nbsp;StrProcess(void)<br />{<br />&nbsp;//char&nbsp;s1[]=&quot;1234567890&quot;;<br />&nbsp;//char&nbsp;s2[]=&quot;4000&quot;;<br />&nbsp;char&nbsp;*s1=&quot;1234567890&quot;;<br />&nbsp;char&nbsp;*s2=&quot;4000&quot;;<br /><br />&nbsp;f1(s1,s2);<br />&nbsp;//f2(s1,s2);<br />}<br /><br />开发环境:LM615,KEIL&nbsp;MDK3.05<br /><br />如果采用数组的方式,S1的数据会改变为&quot;4000567890&quot;<br />如果采用字符串指针的方式,则S1的数据不会改变。<br />不知是什么原因?
zlgmcu 发表于 2008-4-23 11:29 | 显示全部楼层

这是纯粹的C语言问题,字符串复制功能建议采用库函数

(zlgmcu_wdx)
 楼主| MWEN 发表于 2008-4-23 12:58 | 显示全部楼层

不同意见

这只是一个基本的实例,在实际应用中,并不是只用到字符串复制。关键是KEIL中传递字符指针的问题。
王紫豪 发表于 2008-4-23 14:18 | 显示全部楼层

char *str1, char *str2

这两个玩意有实体吗?不会只是指针把?<br /><br /><br />这个就是传说中的孤魂野鬼!!没有“家”的
HWM 发表于 2008-4-23 14:22 | 显示全部楼层

少林武功是从蹲马步开始的。

  
 楼主| MWEN 发表于 2008-4-23 22:14 | 显示全部楼层

仔细看看

看看谭浩强《C程序设计》P192的实例描述,传递的是地址,怎么会是孤魂野鬼??此实例是P192的实例,在TURBO&nbsp;C中验证通过,在KEIL中不能实现。
zlgmcu 发表于 2008-4-25 09:13 | 显示全部楼层

请先看看书在C语言中,以下两个定义有什么不同

char&nbsp;s1[]=&quot;1234567890&quot;;<br /><br />char&nbsp;*s1=&quot;1234567890&quot;;<br /><br />查书有没有找到,也可以看看他在的s1[]和*s1分配的地址在什么地方.<br />我可以告诉您:在LM3S615中,0x00000000~0x0000ffff为程序区也即是FLASH,0x20000000开始的是数据存储区也即是RAM。<br /><br />(zlgmcu_zls)<br />
zlgmcu 发表于 2008-4-25 09:32 | 显示全部楼层

讲得明白些:s1[]数据在SRAM里,读/写;*s1数据在Flash里,只读

PC机与单片机在存储程序上不同,PC机在RAM里运行程序,不论怎样定义,数据都是在RAM里可读可写。但单片机不同,数据如果放在Flash里则用通常的办法不能改写。就是这样。<br /><br />(zlgmcu_wdx)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

44

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部