2015-04-06 78 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

我真的不确定会发生什么。当我在机器上运行该代码时,我会得到所需的输出。你能发布你正在编译的确切代码吗? –