2015-04-15 36 views
0
#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個字符的輸入線,但它不打印任何東西。代碼編譯沒有任何錯誤。我無法弄清楚我錯在哪裏。找不到錯誤的程序打印輸入線長度超過80個字符

回答

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 
} 

lim200

+0

arghhh。愚蠢的我。明白了,謝謝你 – jimo

2

您將數組初始化爲80,但您嘗試打印超過80個字符的字符串,因此您將永遠不會打印空白(也不能存儲超過80個字符)。將k[]line[]的初始化更改爲大於80的值,或使用矢量進行自動調整大小。

相關問題