#include <stdio.h> typedef union{ char a[8]; int c; }myunion; int main() { myunion u; int i; for(i=0;i<7;i++){ u.a[i] = i; } u.a[7]='\0'; printf("%c\n",u.a[6]); //*(u.a)="12345678"; //printf("%d,%d\n",u.a,&(u.a[0])); printf("the string:%s\n",u.a); return 0; }
很奇怪的是,用%s 无法输出字符串,觉得有些困惑...
你的a[8] 是字符数组,i是int类型,问题出在
for(i=0;i<7;i++){ u.a[i] = i; }
第一个赋值就已经把第一个元素设为'\0'了,后面的内容无论是什么也是无法显示的,更不用提这个for循环执行完后整个a数组各元素的内容都是非显示字符。。。
如果要通过for循环填入'0'~'6'的字符的话,应该是
for(i = 0; i < 7; i++) { u.a[i] = i + '0'; }
试试看。
谢谢你的回答!代码改成 u.a[i] = i+'0'; 后,正确运行了。
数字0对应了字符里的'\0',这是以前不知道的。
这样又有了一个问题,如果把 for循环里的语句改成:
u.a[i] = (char)i;
这样还是把'\0'赋给了u.a[0],这样强转有什么问题么?
@chen2012: 这里的强制类型转换只是临时更改了i这个变量的类型,它的值并没有改变,所以这里的强制类型转换是没有意义的。