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