使用null终止符在C中拆分字符串

时间:2016-03-02 20:48:20

标签: c null-terminated

我目前正在尝试实现一个接收文件的程序,读取文件并将其内容复制到数组(farray)。在此之后,我们将farray的内容复制为由null终止符分隔的字符串,并将其复制到名为sarray的字符串数组中。

例如,假设farray包含" ua \ 0 \ 0Z3q \ 066 \ 0",则sarray [0]应包含" ua",sarray [1]应包含&# 34; \ 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 个答案:

答案 0 :(得分:2)

  1. 保留字符数length以供进一步使用。

  2. 您想用空字符替换哪些字符?在此基础上,遍历farray,用空字符替换相应的字符。执行此操作时,请计算由空字符替换的字符数。

  3. 如果由空字符替换的字符数为N,则指针数组的大小必须为N+1

  4. 为指针数组分配内存。

  5. 再次浏览farray并确保指针数组中的元素指向farray中的正确位置。

  6. 更新,以回应OP的评论

    在上面的步骤(2)中,不要替换任何东西,只需计算N.

    在步骤(5)中,使用strdup并将返回的值分配给指针数组的元素,而不是指向farray