2016-03-02 96 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中的任何字符。 –