2015-04-06 120 views
0

我似乎無法弄清楚爲什麼這只是打印數組的第一個位置。該文件包括字母,標點符號和空格。這似乎是閱讀這一切正常,只是沒有打印出正確從陣列打印文本

#include <stdio.h> 
#define LENGTH 520 


char text[LENGTH]; 

void readDataFile(); 
void printScreen(char text[], int i); 

int main() { 

    readDataFile(); 
    return 0; 
} 



void readDataFile(){ 

    int i=0; 
    FILE* fp = fopen("text.txt","r"); 
    while((fgets(&text[i], LENGTH, fp)) !=NULL){ 
     printScreen(&text[i], i); 
     i++; 
    } 
    fclose(fp); 
} 

void printScreen(char text[],int i){ 

    printf("%c",text[i]); 

} 

這些都是我做,現在只打印出的文本文件的最後一行的變化。

#include <stdio.h> 
#define LENGTH 520 


char text[LENGTH]; 

void readDataFile(); 
void printScreen(char text[], int i); 

int main() { 

    readDataFile(); 
    return 0; 
} 



void readDataFile(){ 

    int i=0; 
    FILE* fp = fopen("text.txt","r"); 
    while((fgets(text, LENGTH, fp)) !=NULL){ 
     printScreen(text, i); 
     i++; 
    } 
    fclose(fp); 
} 

void printScreen(char text[],int i){ 

    printf("%s",text); 

} 
+0

第二次循環迭代會導致緩衝區溢出。 '&text [1]'只有'LENGTH-1'字符的存儲空間可用。它每次都應該是'&text [0]','printScreen'應該使用'%s'而不是'i'。 –

+0

所以我做了這些改變,現在它似乎只打印出文本文件的最後一行 –

+0

顯示您所做的更改 –

回答

0

我可以建議你以另一種方式打印整個文件嗎?

與此更換你的函數readDataFile():

void readDataFile(){ 

    int nbread; 
    int fd; 
    char buf[2048]; 

    fd = open("text.txt", O_RDONLY); 
    while ((nbread = read(fd, buf, 2048)) != 0) 
    { 
     buf[nbread] = '\0'; 
     printf("%s\n", buf); 
    } 
} 

而且不要忘了你的文件的開頭添加庫的fcntl:

#include <fcntl.h> 

祝你好運! :)

0

fgets()每次排隊並將其存儲在作爲第一個參數提供的字符串中。它看起來像遍歷文件的每一行並從中打印單個字符。你應該嘗試的是:

while((fgets(text, LENGTH, fp)) !=NULL){ 
    printf("%s", text); 
} 
+0

由於某種原因,當我做出更正時,它只打印文件的最後一行 –

+0

我真的不確定會發生什麼。當我在機器上運行該代碼時,我會得到所需的輸出。你能發佈你正在編譯的確切代碼嗎? –