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

本文介绍了一个使用C语言从标准输入读取字符串的例子,并解释了为何使用int类型数组导致只能正确输出首个字符的问题。通过对比char类型数组的使用,阐述了不同类型数组存储字符时的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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“的表示形式。打印结果为

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值