%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 ,我就不清楚了。这个问题留待以后再来解决。如果有知道的大佬希望不吝赐教。

posted @ 2021-12-20 09:41  想去远方  阅读(741)  评论(0)    收藏  举报