Как составить символы в одну строку в памяти? - PullRequest
1 голос
/ 25 ноября 2011

Я работаю над школьным заданием, и мне нужна небольшая помощь.

Мой вопрос заключается в том, как мне составить символы, считываемые из файла, в одну строку памяти.Вот что у меня есть.

Мой код:

#include <stdio.h>
#include <stdlib.h>
char myString;

int main(int argc, char *argv[]){
    FILE* fin;
    char ch;

    fin=fopen(argv[1],"r");
    while((ch=fgetc(fin))!=EOF){
            printf("%c\n", ch);
    }
    fclose(fin);
    return 0;
}

Мой учитель сказал, что последняя часть main должна быть:

   putchar(‘\n’);    
   printf( myString );
   return 0;
}

Но я 'Я не уверен, как поместить это в мой код.Спасибо заранее, я тоже не собираюсь просто получать ответ, если вы могли бы помочь мне разобраться в этом, было бы здорово, спасибо еще раз.

Обновленный код:

#include <stdio.h>
#include <stdlib.h>


int main(int argc, char *argv[]){
    FILE* fin;
    int i;
    char myString[3];

    fin=fopen(argv[1],"r");
    while(fgets(myString,sizeof(myString), fin)){

            putchar('\n');
            printf("%c\n", myString[i]);
    }
    fclose(fin);
    return 0;
}

Я не уверен, что этот код точно правильный.Он распечатывает элементы в файле и помещает пробел между ними.и есть массив, используемый для строки.

Ответы [ 4 ]

4 голосов
/ 25 ноября 2011

Я тоже не хочу, чтобы мне просто дали ответ

Хорошо.

  • Определите массив char (mystring), достаточно большой для хранения вашей строки
  • Определить счетчик для отслеживания позиции в массиве
  • На каждом шаге сохраняйте ch в массив
  • Не забудьте завершить 0 (сохранить 0 как последний элемент).

На что обратить внимание:

  • Вам нужно будет узнать о realloc и увеличить объем хранилища по мере того, как ваша программа будет читать произвольно длинный ввод. Лучше оставь это на потом
  • Обычно небезопасно printf(dynamicstr). Что если он содержит "%d"? Лучше printf("%s", dynamicstr).
0 голосов
/ 26 ноября 2011
#include <stdio.h>
#include <stdlib.h>

char* myString;
int main(int argc, char *argv[]){
    FILE* fin;
    fpos_t fsize = 0;
    char ch;
    char *pch;

    fin=fopen(argv[1],"r");
    fseek(fin,0,SEEK_END);
    fgetpos(fin, &fsize);
    rewind(fin);
    pch = myString = (char*)malloc((fsize+1)*sizeof(char));
    while((ch=fgetc(fin))!=EOF){
            *pch++ = (char)ch;
    }
    *pch = '\0';
    fclose(fin);
    printf("%s", myString);//printf(myString);// need escape %
    free(myString);
    return 0;
}
0 голосов
/ 26 ноября 2011

Вам необходимо прочитать соответствующую часть вашего учебника, в которой объясняется, что такое «строка» в C. Без вашего понимания почти невозможно ответить на ваш вопрос, просто не сделав это для вас.

C "string" - это непрерывный кусок памяти, содержащий char s и NULL завершен. Вам нужно будет выделить это, а затем поместить символы в него, когда вы читаете их из файла. Обратите внимание, что вы должны убедиться, что вы не выходите за пределы памяти, выделенной при этом, это называется «переполнением буфера».

0 голосов
/ 25 ноября 2011

Вы можете узнать о memcpy и malloc. Они твои друзья.

- Jason

...