%s格式输出字符串时后面多了?s
打印长度大于80的输出行,设想是读入前80个字符,存在一个长度为80数组里,如果碰到换行符,则舍弃,否则则打印出来,并打印后续字符。代码如下:
#include<stdio.h>
int getline(char []);
int main(){
int l , c , i;
char line[80];
while((l = getline(line)) > 80){
for(i = 0 ;i<80;i++)
putchar(line[i]);
//printf("%s",line);
while((c = getchar()) != '\n')
putchar(c);
putchar('\n');
}
return 0;
}
int getline(char line[]){
int i , c;
i = 0;
while(i < 80 && (c = getchar()) != '\n'){
line[i] = c;
i++;
}
if(c == '\n'){
line[i] = c;
}
++i;
return i;
}
刚开始用%s格式输出
//printf("%s",line);
结果如下:

可以看到,输出结果第81、82个字符 位置多了?s。
原因是字符串常量在C语言中以字符数组形式存储,数组中各个元素分别存储字符串的各个字符,并以'\0'作为字符串结束的标志。所以line[80]这个字符数组存了80个字符,但没有以'\0'作为字符串结束标志,当它以%s格式输出时就出现了如上问题。
但为什么多了两个字符,并且这两个字符为什么是 ?s ,我就不清楚了。这个问题留待以后再来解决。如果有知道的大佬希望不吝赐教。

浙公网安备 33010602011771号