Справка по языку C: как сохранить строки из a .txt файл в массив символов? Этот.txt-файл считывается из аргумента командной строки btw.

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

Я использовал указатель, чтобы открыть файл txt, и я открыл его успешно. Но мне нужно сохранить сообщение (состоит из многих абзацев) в массив из отдельных символов, чтобы я мог начать шифрование.

Например, если сообщение: Я люблю собак

Я хочу сохранить это сообщение в массиве символов, таких как:

 char word[5000];
 char word[0] = I;
 char word[1] = l;
 char word[2] = o;
 etc....

Я пытался использовать цикл for для хранения сообщения в одном массиве символов, но когда я пытался распечатать массив, он не отображается в моей командной строке.

Как я могу сохранить сообщение от .txt файл в один массив символов?

это мой код:

int main(int argc, char*argv[])
{
int a;
printf("The number of arguements is :%d n", argc);

for(a=0; a<argc; a++)
{
        printf("argc %d is %s n",a, argv[a]);
}

// Этот раздел использует указатель файла для чтения из текстового файла, а затем отображает его

printf("n");
char * fname= argv[1];
FILE *fptr= fopen(fname, "r");
char word[5000];
int c;
if (fptr==0)
    {
        printf("Could not open filen");
    }else
        {
            printf("FILE opened successfully n");

        }

while (fgets(word, 5000, fptr) !=NULL)
{
    printf("%s n", word);
}


fclose(fptr);

1 ответ

  1. Цикл while использует fgets, предназначенный для чтения строки за строкой. Если требуется массив символов, представляющий байты файла, используйте fread. Сначала вам нужно узнать, насколько велик файл; для этого используйте stat или fstat.

     #include <stat.h>
     struct stat statbuf;
     int FS;
     char* buffer
     if (fstat(fileno(fptr),&statbuf)){
        ... handle error
     }
     FS = statbuf.st_size;
    

    Затем для размера файла теперь в FS выделите несколько байт

     buffer = (char*) malloc(FS)
    

    Затем прочтите содержимое

     fread(buffer, 1, FS, fptr)