2012-06-21 56 views
0

我有一個帶整數的文件。我想在緩衝區中寫入這些整數作爲字符(它的ASCII碼)。因爲它是一個更大的項目的一部分,請不要張貼不同,但請幫助我。我特別需要的是將char存儲在char *類型的緩衝區中。讀取int並將其存儲在C中的char *緩衝區中C

這些是我的聲明。

FILE *in; 
    long io_len = 1000;  
char * buffer; 
    in=fopen("input.txt","a+"); 

    buffer = malloc(io_len * sizeof(*buffer)); 
     if(buffer == NULL){ 
     perror("malloc"); 
     exit(EXIT_FAILURE); 
     } 

我想出了2個解決方案。

如果我寫這一個:

read_ret = read(in, buffer, io_len); 

從文件中,io_len字節,並將其存儲在緩衝區中讀取。但它讀取字符。因此,舉例來說,如果我寫的123將會寫入緩衝區1,2,3不與ASCII數字字符123

所以我這樣做:因爲我想它讀取整數

while((fscanf(in,"%d", &i))==1){ 
     printf(": %d\n", i); 
    } 

。現在我對如何將它們作爲字符存儲在緩衝區中感到困惑。我已經嘗試過,但它給我一個分段錯誤。

while((fscanf(in,"%d", &i))==1){ 
     printf(": %d\n", i); 
    buffer=(char) i; 
    printf("Character in Buffer:%s\n",buffer); 
    buffer++; 
    } 

有想法,後來在我的文件,我寫我的緩衝別的地方,所以不管我會做我想做的指針是在我的字符數組的開始(如果這是有道理的,我說的話)

+2

爲什麼你需要的空間,1.8兆存儲的整數? –

+0

我不會只讀取一個整數。不要看現在的大小,它是一個通用的權利。我的項目只有在我輸入ascii數字作爲輸入時纔有效,並且我想改變它以便給出它的整數等值。而不是寫0,寫下48等等。 – ghostrider

+1

對不起,但你對自己所追求的事情的澄清對我來說根本不清楚。您可能也需要查看您的文件打開模式; ''a +「'不是我期望讀取文件的。當然,你也應該檢查'fopen()'是否成功。但是文件中將會發生什麼?也許你以後是'fread()';除非使用'fileno(in)'作爲文件描述符參數,否則它肯定不是'read()'。根據文件中的內容,'fscanf()'可能會或可能不會有用。 –

回答

2

你的最終代碼至少應該給你一個關於給buffer=(char) i;行指針指定一個整數的警告。它看起來像你想取消引用指針。

當您看起來真的只想打印一個字符時,您也正在打印一個字符串。

你的代碼也許應該是這樣的:

int character_index = 0; 
while((fscanf(in,"%d", &i))==1){ 
     printf(": %d\n", i); 
    buffer[character_index]=(char) i; 
    printf("Character in Buffer:%c\n",buffer[character_index]); 
    character_index++; 
}