为啥我的字符数组不用'\0'初始化

slash5999 2013-07-05 11:18:21
#include <stdio.h>
main()
{
char s[100]={'\0'};

s[0]='1';

printf("%c",s[1]);


}

为什么打印s[1]不是空字符,而是'a',百思不得其解

望高手赐教
...全文
390 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2013-07-09
  • 打赏
  • 举报
回复
不应该会输出字符'a';既然初始化了就会将字符数组s初始化为'\0';输出'a'很怪异,除非你的编译器初始化数组时只对第一个字符初始化。
赵4老师 2013-07-09
  • 打赏
  • 举报
回复
void HexDump(char *buf,int len) {
    int i,j,k;
    char binstr[80];

    for (i=0;i<len;i++) {
        if (0==(i%16)) {
            sprintf(binstr,"%04x -",i);
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        } else if (15==(i%16)) {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
            sprintf(binstr,"%s  ",binstr);
            for (j=i-15;j<=i;j++) {
                sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
            }
            printf("%s\n",binstr);
        } else {
            sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]);
        }
    }
    if (0!=(i%16)) {
        k=16-(i%16);
        for (j=0;j<k;j++) {
            sprintf(binstr,"%s   ",binstr);
        }
        sprintf(binstr,"%s  ",binstr);
        k=16-k;
        for (j=i-k;j<i;j++) {
            sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.');
        }
        printf("%s\n",binstr);
    }
}
电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
lin5161678 2013-07-08
  • 打赏
  • 举报
回复
s[1]是'\0' '\0'是一个不可显示字符 你这是闹那般 人家就叫做不可显示字符了 你还要显示 结果依赖具体环境 不可靠的东西
橡木疙瘩 2013-07-08
  • 打赏
  • 举报
回复
vs2008没有问题:

#include <stdio.h>
int main()
{
    char s[100]={};
    char s2[100];
    int i;

    for( i = 0; i < 100; ++ i)
    {
        printf("%d ",s[i]);
    }
    printf("\n");
    for( i = 0; i < 100; ++ i)
    {
        printf("%d ",s2[i]);
    }
    printf("\n");
    return 0;
}
输出:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 -128 -3 127 0 51 69 0 -64 -2 18 0 -6 -31 35 16 -16 -2 18 0 -128 50 45 16 -31 -
119 84 126 -2 -1 -1 -1 0 -1 18 0 -44 -30 68 0 0 51 69 0 -25 80 116 110 20 21 -30
 -122 -82 123 -50 1 0 -128 -3 127 0 0 0 0 32 0 0 0 -1 -1 -1 -1 4 0 0 0 12 -1 18
0 -88 -1 18 0 24 -74 65 0 111 16 35 110 -2 -1 -1 -1 12 -1 18 0
翠屏阿姨 2013-07-08
  • 打赏
  • 举报
回复
输出NUL我这 查阅ASCII表,首先可以看到'\0'的ASCII值是0,而对应的字符是"NUL" char s[100]={'\0'};//数组全速全是0 s[0]='1';//第一个不是0 printf("kk %c\n",s[1]);//第二个值没有改变,依然是0,再以字符形式输出,就是"NUL"了
SKATE11 2013-07-07
  • 打赏
  • 举报
回复
这个好像只能初始化0吧
橡木疙瘩 2013-07-07
  • 打赏
  • 举报
回复
vc6有很多不合标准的地方。不过数组初始化列表不完整时用0初始化,应该是C89就有的吧?
slash5999 2013-07-07
  • 打赏
  • 举报
回复
我用的vc++6.0,按理说应该输出'\0'才对啊,因为我有初始化啊
AnYidan 2013-07-06
  • 打赏
  • 举报
回复
'\0' ==0==nul

unsigned char a = 0;
	while(a <128)
	{
		printf("%d %c\t",a,a);
		a++;
	}
水平不流 2013-07-06
  • 打赏
  • 举报
回复
引用 9 楼 wizard_tiger 的回复:
楼主好像并没有初始化,只是初始化了s[0]而s[1]只是一个随机值。
已经初始化了.这是一个字符数组.
wizard_tiger 2013-07-06
  • 打赏
  • 举报
回复
楼主好像并没有初始化,只是初始化了s[0]而s[1]只是一个随机值。
qzf362269994 2013-07-06
  • 打赏
  • 举报
回复
好奇楼主怎么能输出a
LubinLew 2013-07-06
  • 打赏
  • 举报
回复
gcc表示输出为空,连空格都没有,LZ用的什么环境?
John_Me 2013-07-06
  • 打赏
  • 举报
回复
你应该给s[1]赋值了,要不就是可能在你初始化没有成功,依然保留你原来地址的数值。你试试打印一下你的s[1]值对应的ascii码,如果输出值不为0,那就是初始化有问题,否则你要么给s[1]赋值了,要么输出的不是s[1]的值。
Ghocode 2013-07-05
  • 打赏
  • 举报
回复
我运行了一遍你的代码结果什么都没有。
水平不流 2013-07-05
  • 打赏
  • 举报
回复
我觉得应该是 0 ,相当于什么都不输出,知识NULL ,但是printf("%c"),需要输出一个字符,于是输出一个空格.
水平不流 2013-07-05
  • 打赏
  • 举报
回复
不对我对输出空格,到时很好奇.居然会输出空格.
水平不流 2013-07-05
  • 打赏
  • 举报
回复
我表示没有输出 任何东西,只输出一个空格.你编译器是什么,会输出个'a'
mujiok2003 2013-07-05
  • 打赏
  • 举报
回复

s[1] == 0

69,382

社区成员

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

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