2015-10-13 3 views
0

Привет, я пытаюсь сделать простую программу, которая будет читать текст и хранить в строке и в конце вернуть его туда, где я назвал свою функцию. Что у меня до сих пор есть:Прочтите файл и сохраните его в строке

void crawler() { 


FILE *file; 
char line[256], letra[256]; 
int j = 0; 
file = fopen("teste.txt", "r"); 

letra[j] = fgetc(file); 
j++; 

while (fgets(line, sizeof(line), file)) { 

    for(int i = 0; line[i] != 00; i++) 
    { 
     if(line[i] == 46) 
     { 
      if(line[i+1] == 46) 
      { 
       letra[j] = " "; 
       j++; 
      } 
     } 
     else 
     { 
      letra[i] = line[i]; 
      j++; 
     } 
    } 
} 

Но я не знаю, правильно ли это. Должен ли я сделать динамический Char вместо использования malloc? Каков наилучший подход к тому, что я пытаюсь сделать?

[Редактировать]

Im получаю сообщение об ошибке в этой строке: letra[j] = " ";

несовместимой указатель целочисленного преобразования

+0

Ты ничего не возвращающегося, и не будет соблазна вернуться адрес вашего буфера, потому что в стеке, и станет недействительным, как только Вы возвращаетесь. Так что да, я бы 'malloc' был буфером. –

+0

Почему вы перемещаете прочитанные данные? Сначала вы читаете его в 'line', и вы копируете его на' letra'. Зачем и зачем? – ForceBru

+0

Что такого особенного в 46? – chux

ответ

0

Вы получаете сообщение об ошибке, потому что " " является строкой, и вы Повторяя попытку присвоить его типу данных char. В C строки обрабатываются типом данных char *, который является указателем. Вы не можете преобразовать указатель на другой тип данных, таким образом, ошибку.

Вы должны сделать это вместо того, чтобы:

while (fgets(line, sizeof(line), file)) { 

    for(int i = 0; line[i] != 00; i++) 
    { 
     if(line[i] == 46) 
     { 
      if(line[i+1] == 46) 
      { 
       letra[j] = ' '; 
       j++; 
      } 
     } 
     else 
     { 
      letra[i] = line[i]; 
      j++; 
     } 
    } 
} 

Я также вижу потенциальную опасность в letra[i] = line[i];, но это не то, что ваш вопрос о том.

Личные заметки: Вы можете легко вводить типы между char и int типами данных одинаково, потому что они оба являются байтами хранения. Это облегчает выполнение математики с помощью букв путем их литья как int перед вычислением.

+0

Повторите свой последний абзац: 'char' и' short' до арифметических операций повышаются до 'int'. И буквальное значение '' a'' имеет тип 'int'. –

+0

@WeatherVane Я думал, что тип данных 'int' был 8 бит, но вы предполагаете, что' short' равно 8, а 'int' - 16? Прошло некоторое время с тех пор, как я сделал программирование на C, которое занималось цифрами. Большинство моих вещей - синтаксический анализ и обработка команд. –

+0

'int' не менее 16 бит, но чаще всего 32 или 64 бит. –

0

Надежда это решает вопрос Yours,

#include<stdio.h> 

FILE *pfile; 
char fileData[200],letter; 
int ind; 

void storeData(); 

int main() 
{ 
storeData(); 
printf("Data From File:\n"); 
printf("%s",fileData); 
return 0; 
} 

void storeData() 
{ 

    ind=0; 
    pfile=fopen("textf.txt","r"); 
    while((letter=fgetc(pfile))!=EOF) 
    { 
    fileData[ind]=letter; 
    ind++; 
    } 
    fileData[ind]='\0'; 

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