读取int并将其存储在C中的char *缓冲区中

时间:2012-06-21 22:58:00

标签: c io

我有一个整数文件。我想在缓冲区中写入那些整数作为字符(它的ascii数字)。因为它是一个更大的项目的一部分,请不要发布不同的,但请帮助我。我特别需要的是将字符存储在char *类型的缓冲区中。

这些是我的声明。

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++;
    }

请记住,稍后在我的文件中,我在其他地方编写缓冲区,所以无论我做什么,我都希望指针位于我的char数组的开头(如果我说的是有意义的话)

1 个答案:

答案 0 :(得分: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++;
}