请帮忙找一下错。。。

yunshishenlou 2010-08-30 11:40:53
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void main(void)
{
int i,j;
char a[4] = {'t','h','i','s'};
char s[4] = {0};

for( i = 0;i<4;i++ )
for(j = 1;j+i <= 4;j++)
{
memset(s,0,4);
strncpy(s,&a[i],j);
printf("%s\n",s);
}
}

为什么该输出this的时候连出两个this,后面还有乱码?
...全文
141 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yunshishenlou 2010-09-01
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 longx_ok 的回复:]

提醒下,也是一点小经验吧。以后遇到乱码这种情况很多时候都是因为越界这种小原因,很多时候自己多总结下对自己的学习是很有帮助的!
[/Quote]谢谢提醒!
longx_ok 2010-08-31
  • 打赏
  • 举报
回复
提醒下,也是一点小经验吧。以后遇到乱码这种情况很多时候都是因为越界这种小原因,很多时候自己多总结下对自己的学习是很有帮助的!
yunshishenlou 2010-08-31
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 jiangbinben 的回复:]

#include <stdio.h>
void main()
{
char str[5]={'h','i','w','o','r'};
printf("the str is:%s\n",str);

}
这样为什么会打印乱码?
[/Quote]
因为str指针所指的字符串没有\0标志。
奋斗小青年 2010-08-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ctest_ 的回复:]
strncpy(s,&a[i],j);
时字符串后面有一个结束符,\0,
[/Quote]
justkk 2010-08-30
  • 打赏
  • 举报
回复
还有,字符串a不是以\0结尾的..
ctest_ 2010-08-30
  • 打赏
  • 举报
回复
strncpy(s,&a[i],j);
时字符串后面有一个结束符,\0,
justkk 2010-08-30
  • 打赏
  • 举报
回复
s的长度不足,另外,strncpy不一定自动添加结尾的\0
ctest_ 2010-08-30
  • 打赏
  • 举报
回复
char s[4] = {0};

越界了

应该定义成char a[5]
huajia136651 2010-08-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 duke56 的回复:]

引用 7 楼 walkersfaint 的回复:
直接
strncpy(s,a, 4);

不就完了


strncpy虽然是指定copy多少个的,但是printf函数也是只认\0来结果地...
[/Quote]
八错八错
duke56 2010-08-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 walkersfaint 的回复:]
直接
strncpy(s,a, 4);

不就完了
[/Quote]

strncpy虽然是指定copy多少个的,但是printf函数也是只认\0来结果地...
子瑜1003 2010-08-30
  • 打赏
  • 举报
回复
#include <stdio.h>
void main()
{
char str[5]={'h','i','w','o','r'};
printf("the str is:%s\n",str);

}
这样为什么会打印乱码?
walkersfaint 2010-08-30
  • 打赏
  • 举报
回复
直接
strncpy(s,a, 4);

不就完了
yunshishenlou 2010-08-30
  • 打赏
  • 举报
回复
谢谢大家了,改一条语句就行了。
char s[4] = {0};改成char s[5] = {0};就行了。
printf %s时要以\0为标志,s[4]空间不足,没有结束标志,所以输出有乱码。

69,380

社区成员

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

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