现在的位置: 首页 > 综合 > 正文

单片机—C语言char数组和字符串赋值、拷贝、附加注意事项

2012年08月08日 ⁄ 综合 ⁄ 共 969字 ⁄ 字号 评论关闭

     

说明:原创都是个人经验,本人才疏学浅,如有不妥之处切盼高手指点纠正!

 

       今天在做单片机的一个小程序,本来以为改一改例子程序很简单,结果耗费了一一整天时间。程序中用了很多strcat函数对字符串进行拷贝,我为了增强程序的通用性,就把原来字符串的地方用char数组代替。结果出现了很多意想不到的问题,输出字符混乱,系统重启等等。经过自己分析才发现strcat函数在作怪。C程序里规定字符串数组以\0作为结束符,也就是说strcat函数的操作只有在收到结束符才停止,如果不停止则胡乱寻址,程序不错才怪呢。

    strlen,strcat,strcpy等函数是以\0即0x00为结束符标识。而在实际应用中,总不能每次都在字符串后面跟个\0字符吧,在一些需要转换类型的场合很不实用。

    为了摆脱这个限制,可以使用strncpy,strncat 这一类函数来操作,根据len来决定拷贝和附加的长度。以strncpy函数举例

char *strncpy ( char *dst, /* destination string */

                          char *src, /* source string */

                           int len); /* max characters to copy */)

原文的表述:The strncpy function copies at most len characters fromsrc todst. Characters are copied until a null character ('\0') is copied or untillen characters
have been copied. If the length ofsrc is less thanlen the remaining bytes in
dst are padded with null characters ('\0').

   注:*pStrInf=strstr(buf,"=");//返回指针是"="的起始地址,即包含"=".

 

 

 

   其中这里特别说明一下:strcat和strcpy的区别,都是拷贝函数,Strcat是附加在源字符串的后面,而strcpy函数是从源字符串的0地址开始拷贝!!

   为了以后自己不犯错同样错误,记录下来,也希望能帮助到别人。

 

 

抱歉!评论已关闭.