Расщепление строки в 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 ответ
Сохранить количество символов
length
для дальнейшего использования.Какие символы вы хотите заменить нулевыми символами? Исходя из этого, пройти через
farray
, замените соответствующие символы нулевым символом. При этом подсчитайте количество символов, которые были заменены нулевыми символами.Если число символов, которые были заменены нулевым символом, равно N, то массив указателей должен иметь размер
N+1
,Выделите память для массива указателей.
Прохождение
farray
снова и убедитесь, что элементы в массиве указателей указывают на правильное расположение вfarray
,
Обновление в ответ на комментарий ОП
На шаге (2) выше ничего не заменяйте, просто вычислите N.
На этапе (5) используйте strdup
и присвоить возвращаемое значение элементам массива указателей, вместо этого указывая на farray
,