单片机—C语言char数组和字符串赋值、拷贝、附加注意事项
说明:原创都是个人经验,本人才疏学浅,如有不妥之处切盼高手指点纠正!
今天在做单片机的一个小程序,本来以为改一改例子程序很简单,结果耗费了一一整天时间。程序中用了很多strcat函数对字符串进行拷贝,我为了增强程序的通用性,就把原来字符串的地方用char数组代替。结果出现了很多意想不到的问题,输出字符混乱,系统重启等等。经过自己分析才发现strcat函数在作怪。C程序里规定字符串数组以 作为结束符,也就是说strcat函数的操作只有在收到结束符才停止,如果不停止则胡乱寻址,程序不错才怪呢。
strlen,strcat,strcpy等函数是以 即0x00为结束符标识。而在实际应用中,总不能每次都在字符串后面跟个 字符吧,在一些需要转换类型的场合很不实用。
为了摆脱这个限制,可以使用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 (" ") 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 (" ").
注:*pStrInf=strstr(buf,"=");//返回指针是"="的起始地址,即包含"=".
其中这里特别说明一下:strcat和strcpy的区别,都是拷贝函数,Strcat是附加在源字符串的后面,而strcpy函数是从源字符串的0地址开始拷贝!!
为了以后自己不犯错同样错误,记录下来,也希望能帮助到别人。
阅读更多
- 上一篇: c 从字符串数组中选择特定的字符串
- 下一篇: C语言里怎么对一组CHAR类型的数组进行查找