#include <stdio.h>
#include <stdlib.h>
#define PRINT 80
int get_line(char k[], int lim);
int main(){
int len;
char line[PRINT];
while((len = get_line(line, PRINT)) > 0){
if(len > PRINT){
printf("%s", line);
}
}
}
int get_line(char k[], int lim){
int i, c;
for (i =0; i < lim-1 && (c=getchar()) != EOF && c!= '\n'; ++i){
k[i] = c;
}
if(c == '\n'){
k[i] = c;
++i;
}
k[i] = '\0';
return i;
}
上述代码用于打印长度大于80个字符的所有输入行,但不打印任何内容。代码编译没有任何错误。我无法弄清楚自己哪里出错了。
答案 0 :(得分:4)
if(c=='\n'){
k[i] = c;
++i;
}
通过递增i
,你有数组越界访问,你的问题本身会导致未定义的行为,在一个可容纳80个字符的数组中存储超过80个字符。
char line[80];
使数组大小超过80个字符,如
char line[200];
然后尝试做你正在做的事情并在写入数组line
if(i > 200)
{
printf("Array can't hold this character\n");
// break or return
}
您的lim
应为200
。
答案 1 :(得分:2)
您将数组初始化为80,但是您尝试打印超过80个字符的字符串,因此您将始终打印空白,因为您将永远不会拥有该方案(也不能存储超过80个字符)。将k[]
和line[]
的初始化更改为大于80的值,或使用向量进行自动重新调整大小。