字符串连接的问题

oosmile 2011-10-30 10:20:55
INT8U str6[] = "hello=,";
INT8U user_name[] = "user";
INT8U password[] = "123456";

strcat(str6,"\"");
strcat(str6,user_name);
strcat(str6,"\",\"");
strcat(str6,password);
strcat(str6,"\"\r\n");


为什么输出结果为 hello=,"","123456"

user_name呢?
...全文
81 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bjtea 2011-10-30
  • 打赏
  • 举报
回复
初始化 str6[] = "hello=,"; 时,将str6[]定义短了;
改大点维数,例如改成str6[23] = "hello=,"; 就行。

TomiTwo 2011-10-30
  • 打赏
  • 举报
回复

INT8U user_name[] ="user";
INT8U password[] = "123456";
INT8U str6[20] = "hello=,";

strcat(str6,"\"");
strcat(str6,user_name);
strcat(str6,"\",\"");
strcat(str6,password);
strcat(str6,"\"\r\n");
你试试上面的代码
你定义的字符串数组全没有给大小,系统在定义时就给定义在一起了,等你向str6中粘贴的时候,user刚好充掉了。
meegowei1 2011-10-30
  • 打赏
  • 举报
回复
你这样写,输入 hello=,"","123456" 是正确的
因为 keil C 编译时,对内存空间的分配是连续的,即上一个变量跟着就是下一个变量的地址


因为 INT8U str6[] 实际上占用 7 个字节的内存空间,而 第 8 个字节是 \0
INT8U user_name[] 实际上的内存是跟在 str6[7] 后面,即 如果 str6+8 的地址 即 user_name[0] 的地址

而 strcat 是计算 str6 的地址后,再加在后面,所以导致你说的问题,下面举些例说明,你自己可以打印出来试试

所以:
strcat(str6,"\""); //执行到这里时 str6[8]="\""
strcat(str6,user_name); //执行到这里时 str6[8]='"',str[9]='s' ....

这里要说明一下, str6[8] 实际上是 user_name[0] ,所以已经被上一个语句冲掉了
bjtea 2011-10-30
  • 打赏
  • 举报
回复
本身有22个字符,加结束符,所以,最少需要23

27,373

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧