用空终止符拆分C中的字符串

用空终止符拆分C中的字符串,c,null-terminated,C,Null Terminated,我目前正在尝试实现一个程序,该程序接收一个文件,读取该文件并将其内容复制到一个数组(farray)。在此之后,我们将farray的内容作为字符串复制到一个名为sarray的字符串数组中,字符串由空终止符分隔 例如,假设farray包含“ua\0\0Z3q\066\0”,那么sarray[0]应该包含“ua”,sarray[1]应该包含“\0”,sarray[2]应该包含“Z3q”,最后sarray[3]应该包含“66” 但是,我不知道如何用空终止符分隔字符串。我目前只能使用系统调用,如fread

我目前正在尝试实现一个程序,该程序接收一个文件,读取该文件并将其内容复制到一个数组(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;
}
#包括
#包括
#包括
#包括
#包括
int main(int argc,char*argv[]){
焦*法拉;
const char*sarray;
长度长;
int i;
//打开输入文件
文件*input=fopen(argv[1],“rb”);
如果(!输入){
perror(“输入文件错误”);
退出(退出失败);
}
//找出长度
fseek(输入,0,搜索结束);
长度=ftell(输入);
fseek(输入,0,搜索设置);
//为farray和sarray分配内存
farray=malloc(长度+1);
//将文件内容读取到farray,然后关闭文件
fread(farray,1,长度,输入);
fclose(输入);
//你在这里分线吗
//释放内存
游离(法拉利);
返回0;
}
  • 保留字符数
    长度
    ,以备将来使用

  • 要用空字符替换哪些字符?在此基础上,遍历farray,用空字符替换相应的字符。执行此操作时,计算被空字符替换的字符数

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

  • 为指针数组分配内存

  • 再次遍历
    farray
    ,确保指针数组中的元素指向
    farray
    中的正确位置

  • 更新,回应OP的评论

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


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

    我们试图做的是拆分farray并将单个字符串作为单个元素复制到sarray中。我们不会用空字符替换farray中的任何字符。