2016-03-02 11 views
-1

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

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

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

код ЦСИ:

#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; 
} 

ответ

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

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

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

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

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

Update, в ответ на комментарий OP в

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

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

+0

То, что мы пытаемся сделать, состоит в том, чтобы расколоть и передать отдельные строки в саррей как отдельные элементы. Мы не заменяем никаких символов в farray нулевыми символами. –

 Смежные вопросы

  • Нет связанных вопросов^_^