打印
[ZLG-MCU]

LM中使用字符串遇到的问题

[复制链接]
1040|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
MWEN|  楼主 | 2008-4-23 10:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void f1(char str1[], char str2[])
{
 uint8 i=0;
    
 while(str2!='\0')
 {
 str1=str2;
 i++;
 }
}

void f2(char *str1, char *str2)
{
 for (;*str2!='\0';str1++,str2++)
   *str1 = *str2;   //不会将str2的复制到str1
}

void StrProcess(void)
{
 //char s1[]="1234567890";
 //char s2[]="4000";
 char *s1="1234567890";
 char *s2="4000";

 f1(s1,s2);
 //f2(s1,s2);
}

开发环境:LM615,KEIL MDK3.05

如果采用数组的方式,S1的数据会改变为"4000567890"
如果采用字符串指针的方式,则S1的数据不会改变。
不知是什么原因?

相关帖子

沙发
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

这两个玩意有实体吗?不会只是指针把?


这个就是传说中的孤魂野鬼!!没有“家”的

使用特权

评论回复
5
HWM| | 2008-4-23 14:22 | 只看该作者

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

使用特权

评论回复
6
MWEN|  楼主 | 2008-4-23 22:14 | 只看该作者

仔细看看

看看谭浩强《C程序设计》P192的实例描述,传递的是地址,怎么会是孤魂野鬼??此实例是P192的实例,在TURBO C中验证通过,在KEIL中不能实现。

使用特权

评论回复
7
zlgmcu| | 2008-4-25 09:13 | 只看该作者

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

char s1[]="1234567890";

char *s1="1234567890";

查书有没有找到,也可以看看他在的s1[]和*s1分配的地址在什么地方.
我可以告诉您:在LM3S615中,0x00000000~0x0000ffff为程序区也即是FLASH,0x20000000开始的是数据存储区也即是RAM。

(zlgmcu_zls)

使用特权

评论回复
8
zlgmcu| | 2008-4-25 09:32 | 只看该作者

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

PC机与单片机在存储程序上不同,PC机在RAM里运行程序,不论怎样定义,数据都是在RAM里可读可写。但单片机不同,数据如果放在Flash里则用通常的办法不能改写。就是这样。

(zlgmcu_wdx)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

44

帖子

0

粉丝