Проблемы с указателем в основной программе ввода / вывода C-файлов - PullRequest
2 голосов
/ 20 марта 2009
#include <stdio.h>
#include <stdlib.h>

int main() 
{
     FILE *fp = fopen("lr.txt", "r");
     fseek(fp, 0L, SEEK_END);
     int size = ftell(fp);
     fseek(fp, 0L, SEEK_SET);

     char *lorem_ipsum;

     int i = 0;
     lorem_ipsum = (char*) malloc(sizeof(char) * size);
     while(fscanf(fp, "%s\n", lorem_ipsum) != EOF)
     {
      printf("%s", lorem_ipsum[i]);
      i++;

     }
     fclose(fp);
     return 0;
}

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

Ответы [ 3 ]

6 голосов
/ 20 марта 2009

Вы пытаетесь напечатать lorem_ipsum[i], как если бы это была строка. lorem_ipsum это строка, поэтому lorem_ipsum[i] это просто символ.

Сегфоул происходит из-за того, что printf просматривает значение символа в lorem_ipsum[i] и интерпретирует его как указатель char * (строка). Естественно, значение символа не соответствует действительному выделенному адресу памяти.

3 голосов
/ 20 марта 2009

Вы передаете char (lorem_ipsum[i]) в функцию fscanf, которая ожидает char* в качестве аргумента.

Возможно, вы захотите использовать lorem_ipsum или lorem_ipsum+i, если вы действительно хотите удалить первые i символов.

0 голосов
/ 20 марта 2009

Можете ли вы объяснить, что вы пытаетесь сделать в цикле for?

Мне кажется, что вы пытаетесь прочитать файл построчно, а затем распечатать строку. Однако когда вы выполняете printf ("% s", lorem_ipsum [i]), вы отправляете символ, а не строку.

...