首页 新闻 会员 周边

C语言字符串指针的问题

0
悬赏园豆:10 [已解决问题] 解决于 2013-02-17 15:19
View Code
#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 无法输出字符串,觉得有些困惑...

c
长溪的主页 长溪 | 初学一级 | 园豆:183
提问于:2013-02-17 10:34
< >
分享
最佳答案
1

你的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';  
}

试试看。

收获园豆:10
飞鸟_Asuka | 菜鸟二级 |园豆:209 | 2013-02-17 10:41

谢谢你的回答!代码改成  u.a[i] = i+'0';  后,正确运行了。

数字0对应了字符里的'\0',这是以前不知道的。

这样又有了一个问题,如果把 for循环里的语句改成:

u.a[i] = (char)i;

这样还是把'\0'赋给了u.a[0],这样强转有什么问题么?

长溪 | 园豆:183 (初学一级) | 2013-02-17 11:37

@chen2012: 这里的强制类型转换只是临时更改了i这个变量的类型,它的值并没有改变,所以这里的强制类型转换是没有意义的。

飞鸟_Asuka | 园豆:209 (菜鸟二级) | 2013-02-17 12:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册