2012-06-21 38 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++; 
}