linux 下c的一个输出问题

yuanxuran0101 2010-09-28 06:55:04
代码如下:
#include <stdio.h>

int main()
{
int i;
char a[]={'a','b','A','B'};
for(i=0;a[i]!='\0';i++)
printf("%c ",a[i]);
for(i=0;*(a+i)!='\0';i++)
printf("%c ",*(a+i));
char *b=a;
printf("\n");
printf("%c",*b);
for(i=0;a[i]!='\0';i++)
printf("%c ",*(b+i));
printf("\n");
printf("%s",a);
return 0;
}

然后编译
gcc test.c -o test
执行:
./test
a b A B a b A B
aa b A B
abABPuTTY[root@proxy C]# PuTTY

问题:程序中没有打印 PuTTY 为何出现这个输出
...全文
113 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanxuran0101 2010-09-29
  • 打赏
  • 举报
回复
OK ,结贴
ericming200409 2010-09-28
  • 打赏
  • 举报
回复
输出字符串的时候千万注意是不是以 '\0'结尾
cheng_fengming 2010-09-28
  • 打赏
  • 举报
回复
%s打印是遇到分隔符结束的,所以多了一些东西,解决方法:
1 char a[] = {'a','b','A','B','\0'}; //自己添加一个'\0'
2 char a[] = "abAB"; //这样定义字符数组,编译器会在后面自动给你增加一个'\0'

在实际工作中一般都是第2种方式,这样方便简单,此时有
sizeof(a) = 5;
strlen(a) = 4;
jiangyue2008 2010-09-28
  • 打赏
  • 举报
回复
楼上正解
小魔菇 2010-09-28
  • 打赏
  • 举报
回复
多输出的东东是乱码

用汇编查了一下

subl $16, %esp
movb $97, -8(%ebp)
movb $98, -7(%ebp)
movb $65, -6(%ebp)
movb $66, -5(%ebp)
movl $0, %eax
addl $16, %esp



虽然char a[]={'a','b','A','B'};的长度是4字节 但是堆栈中给它分配了16字节
所以后面的12字节是无法预料的
所以需要要加上'\0' 表示结束
既 char a[]={'a','b','A','B','\0'};
或者用 char a[]="abAB";这种方式它会默认在末尾加上'\0'表示结束
somebody 2010-09-28
  • 打赏
  • 举报
回复
PuTTY[root@proxy C]# PuTTY

这应该是一个标志而已!

你随便写个简单的printf("dafjalj");就可以检测到了!
CHI_LE_MEI 2010-09-28
  • 打赏
  • 举报
回复
char a[]={'a','b','A','B'};

char a[]="abAB";
Xiaoloveliuforever 2010-09-28
  • 打赏
  • 举报
回复
数组a的首地址???

69,373

社区成员

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

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