您的位置:首页 > 其它

整数数组输出字符串的问题

2010-09-11 18:59 267 查看
#define include <stdio.h>
#define MAXLINE 100
 
void getline(int s[], int n);
 
int main(void)
{
       int s[MAXLINE];
       getline(s, MAXLINE);
       printf("%s",s);
       return 0;
}
 
void getline(int s[], int n)
{
       int i, c;
       for(i=0; i<n-1 && (c=getchar())!=EOF && c!='/n'; i++)
              s[i] = c;
       if(c == '/n'){
              s[i] = c;
              ++i;
       }
      
       s[i] = '/0';
}
 
输入字符串输出的时候只能打印第一个字符,问题据师哥说是int型字符占四个字节,但是char型只占一个字节,所以用int数组来存储字符的时候会剩余三个字节,并且全部为0。例如0000 0000;0000 0000;0000 0000;0110 0001;表示的其实只是“a“这个字符。当用字符串的形式打印的时候是倒序打印的,即先打印0110 0001这个字节,打印出”a“,然后在打印倒数第二个字节0000 0000;正好是字符‘/0',是字符串的终止符,所以就不再继续打印了,就出现了只打印第一个字符的情况。
 
如果把上面的数组换成char型就没有问题了。
 
具体为何倒序打印还不是很清楚,待以后查证
 
这里有个程序可以证明是倒序打印的:
 
 
int main(void)
{
     int a[2]={25185}
     printf("%s、n",a);
}
 

 
25185用二进制表示为0000 0000;0000 0000;0110 0010;0110 0001;可以发现最后一个字节0110 0001正好是十进制97,是字符”a“,倒数第二个字节0110 0010则是字符”b“的表示形式。打印结果为
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  include c 存储
相关文章推荐