2016-03-02 100 views
-1

我目前正试图实现一个程序,该程序获取文件,读取文件并将其内容复制到数组(farray)。在此之后,我们将farray的内容作为由空终止符分隔的字符串复制到名为sarray的字符串数组中。例如,如果farray包含“ua \ 0 \ 0Z3q \ 066 \ 0”,那么sarray [0]应该包含“ua”,sarray [1]应该包含“\ 0”,sarray [2]应该包含“Z3q”,最后sarray [3]应该包含“66”由空终止符分割C中的字符串

但是我无法弄清楚如何用空终止符分隔字符串。我目前只能使用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; 
} 

回答

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

  2. 你想用空字符替换哪些字符?基于此,请通过farray,用空字符替换适当的字符。在这样做的过程中,计算被空字符替换的字符数。

  3. 如果被空字符替换的字符数为N,则指针数组的大小需要为N+1

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

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

更新,响应OP的评论

在步骤(2)中,不用更换任何东西,只是计算N.

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

+0

我们正在尝试做的是分割farray并将单个字符串作为独立元素复制到sarray中。我们不会用空字符替换farray中的任何字符。 –