Расщепление строки в C с помощью нулевого терминатора

В настоящее время я пытаюсь реализовать программу, которая принимает файл, читает файл и копирует его содержимое в массив (farray). После этого мы копируем содержимое farray в виде строк, разделенных нулевыми терминаторами, в массив строк с именем sarray.

Например, скажем, что farray содержит "ua\0\0Z3q\066\0", тогда sarray[0] должен содержать "ua", sarray[1] должен содержать "\0", sarray[2] должен содержать "Z3q", и, наконец, sarray[3] должен содержать "66"

Однако я не могу понять, как отделить строку нулевыми терминаторами. В настоящее время я могу использовать только системные вызовы, такие как fread, fopen, fclose, fwrite... и т. Д. Может кто-нибудь, пожалуйста, помогите мне?

Код SRC:

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
#include <string.h>

int main(int argc, char *argv[]){

    char *farray;
    const char *sarray;
    long length;
    int i;

    //Open the input file
    FILE *input = fopen(argv[1], "rb");
    if(!input){
        perror("INPUT FILE ERROR");
        exit(EXIT_FAILURE);
    }

    //Find the length
    fseek(input, 0, SEEK_END);
    length = ftell(input);
    fseek(input, 0, SEEK_SET);

    //Allocate memory for farray and sarray
    farray = malloc(length + 1);

    //Read the file contents to farray then close the file
    fread(farray, 1, length, input);
    fclose(input);

    //Do string splitting here

    //Free the memory
    free(farray);


    return 0;
}

1 ответ

  1. Сохранить количество символов length для дальнейшего использования.

  2. Какие символы вы хотите заменить нулевыми символами? Исходя из этого, пройти через farray, замените соответствующие символы нулевым символом. При этом подсчитайте количество символов, которые были заменены нулевыми символами.

  3. Если число символов, которые были заменены нулевым символом, равно N, то массив указателей должен иметь размер N+1,

  4. Выделите память для массива указателей.

  5. Прохождение farray снова и убедитесь, что элементы в массиве указателей указывают на правильное расположение в farray,

Обновление в ответ на комментарий ОП

На шаге (2) выше ничего не заменяйте, просто вычислите N.

На этапе (5) используйте strdup и присвоить возвращаемое значение элементам массива указателей, вместо этого указывая на farray,

Другие вопросы по тегам