代码还是简单,但是还是字符串长度无法弄清楚,请大家帮我讲讲好么?

Kshape 2006-04-11 09:15:16
//记事本编写,cl编译
#include <cstdio>
#include <string>

void main()
{
char _str1[5];
char _str2[5];

memset(_str1, '\0', sizeof(_str1));
memset(_str2, '\0', sizeof(_str2));

printf("str1:sizeof:%d[:%s\n",sizeof(_str1),_str1);
printf("str2:sizeof:%d[:%s\n",sizeof(_str2),_str2);
printf("str1:strlen:%d[:%s\n",strlen(_str1),_str1);
printf("str2:strlen:%d[:%s\n",strlen(_str2),_str2);

scanf("%s", _str1);
scanf("%s", _str2);

printf("str1:sizeof:%d[:%s\n",sizeof(_str1),_str1);
printf("str2:sizeof:%d[:%s\n",sizeof(_str2),_str2);
printf("str1:strlen:%d[:%s\n",strlen(_str1),_str1);
printf("str2:strlen:%d[:%s\n",strlen(_str2),_str2);
}
//两个字符串长度都<=5时打印输出正常,不抱错
//两个字符>5时有时正常,有时不正常(根据输入长度而定),有时可以输出正确的_str1,_str2,但是有时就不能正确输出结果了(正确是指和输入一致)
//两个字符>5时有时不报错,有时报错(根据长度而定)
...全文
136 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jixingzhong 2006-04-11
  • 打赏
  • 举报
回复
...

scanf("%5s%5s", _str1,str2);
==>
scanf("%4s%4s", _str1,str2);
只能接收4个字符,
否则串的终止字符被覆盖了 ...
jixingzhong 2006-04-11
  • 打赏
  • 举报
回复
scanf("%s", _str1);
scanf("%s", _str2);
===》
scanf("%5s%5s", _str1,str2);
michael_g_hu 2006-04-11
  • 打赏
  • 举报
回复
这个是基本知识啊,楼主好好看下地址方面的知识
dragonzxh 2006-04-11
  • 打赏
  • 举报
回复
如果没有问题。才是真的问题。。。。
du51 2006-04-11
  • 打赏
  • 举报
回复
scanf("%s", _str1);
_str1指向一个五个char的空间..过长的时候空间已经越界.当然出错.
你输入的东西只能小于5

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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