Скопируйте массив символов из одного файла в другой, используя две отдельные функции в C - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть задача получить массив символов из одного текстового файла и поместить этот текст в другой файл. Я должен использовать две функции. Они должны выглядеть так:

int writeText(FILE *wp, char text[])
int readText(FILE *wp, char text[], int max)

Я должен использовать свою собственную функцию strlen (_strlen).

В функции readText они сказали, что я должен не забыть поставить '\ 0' на закончите и убедитесь, что я не помещаю слишком много знаков в массив (больше, чем размер массива).

Это мой код

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

int _strlen (char *text)
{
    int i;
    for (i = 0; text[i] != '\0'; ++i);    
    return i;
}

int writeText(FILE *wp, char text[])
{
    int len = _strlen(text);
    for (int i = 0; i < len; i++) {
       fputc (text[i], wp);
    }
    return _strlen(text);
}

int readText(FILE *wp, char text[], int max)
{
    int length = _strlen(text);
    int c;
    int i = 0;
    max = 10000;
    while( (c = fgetc(wp)) != EOF && i <= max )
    {
        fputc (text[i], wp);
        i++;
    }
    if (i > max)
    {
        printf("This array is too big.");
    }
    text[i] = '\0';

    return _strlen(text);
}


int main (int argc, char *argv[])
{
    if (argc != 3) {
    printf("You should run program in this way:\n");
    printf("%s file_source file_result\n",argv[0]);
    exit(1);
    }

    int sum;
    const char source[] = "source.txt"; // plik wejściowy
    const char result[] = "result.txt";     // plik wyjściowy
    FILE *wz, *wc;                         // wskaźnik do pliku

    if( (wz= fopen(source,"r")) == NULL) {
        printf("Open error %s\n", source);
        exit(1);
    }
    if( (wc= fopen(result,"w")) == NULL) {
        printf("Open error %s\n",result);
        exit(2);
    }
    char tab1[1000];
    readText(wz, tab1, 1000);
    writeText(wc, tab1);


    int fclose(FILE *wp);
    int fclose(FILE *wc);

}

После запуска этой программы я получаю что-то вот так:

p\E2\B4&\FF

И я не знаю почему.

1 Ответ

1 голос
/ 05 апреля 2020

fput c записывает символ в указанный поток. Вы хотите прочитать символ и поместить его в массив символов. Удалите fput c и просто присвойте массив из fget c массиву с указанным индексом c. Нет необходимости переназначать переменную max. Как и раньше, он будет перезаписывать память, не назначенную массиву, если входной файл будет больше вашего размера массива. Вы также хотите, чтобы l oop заканчивался на два меньше, чем max, если вы хотите добавить нулевой завершающий символ в max - 1 или последний индекс в выделенном массиве.

int readText(FILE *wp, char text[], int max)
{
    int c, i = 0;
    while((c = fgetc(wp)) != EOF && i < max - 1 )
    {
        text[i] = c;
        ++i;
    }

    text[i] = '\0';

    return _strlen(text);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...