正在访问整数,因为字符数组在不同的机器和环境上不同
Is accessing a integer as a character array differs on different machine and environment
这是我的代码
int c = 10;
char *ch = &c;
ch[0] = 'a';
ch[1] = 'b';
ch[2] = 'c';
ch[4] = '[=10=]';
printf("%s\n",ch);
printf("%x\n",c);
printf("%d\n",c);
输出是 abc
636261
和 6513249
在我看来是正确的,但它是标准结果还是在不同的机器上有所不同,例如第二个 [= 的输出14=]就像616263
?或者在某些机器上这样做是非法的?
编辑:我在 Ideone.Com 中尝试过,结果也一样。
but is it a standard result or it varies on different machine for example the output of the second printf is like616263
执行字符集不需要是ASCII,例如在带有EBCDIC的系统上你会得到不同的结果。
(C99, 5.2.1p1) "The values of the members of the execution character set are implementation-defined."
此外,int
的大小不需要是 32 位,例如在具有 16 位 int
的系统上,您的程序是未定义的行为。如评论中所述,如果您的系统是大端系统(616263
而不是小端系统中的 636261
),您将得到不同的结果。
这是我的代码
int c = 10;
char *ch = &c;
ch[0] = 'a';
ch[1] = 'b';
ch[2] = 'c';
ch[4] = '[=10=]';
printf("%s\n",ch);
printf("%x\n",c);
printf("%d\n",c);
输出是 abc
636261
和 6513249
在我看来是正确的,但它是标准结果还是在不同的机器上有所不同,例如第二个 [= 的输出14=]就像616263
?或者在某些机器上这样做是非法的?
编辑:我在 Ideone.Com 中尝试过,结果也一样。
but is it a standard result or it varies on different machine for example the output of the second printf is like616263
执行字符集不需要是ASCII,例如在带有EBCDIC的系统上你会得到不同的结果。
(C99, 5.2.1p1) "The values of the members of the execution character set are implementation-defined."
此外,int
的大小不需要是 32 位,例如在具有 16 位 int
的系统上,您的程序是未定义的行为。如评论中所述,如果您的系统是大端系统(616263
而不是小端系统中的 636261
),您将得到不同的结果。