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

Я действительно не уверен, что может произойти. Когда я запускаю этот код на своей машине, я получаю желаемый результат. можете ли вы опубликовать точный код, который вы компилируете? –

Смежные вопросы