2012-10-28 65 views
1

为什么我们使用char数组在内存中创建缓冲区而不是int数组,并且如果int数组可用于创建缓冲区,如何从中获取输出?为什么我们使用char数组来创建缓冲区

int main() 
{ 
    char buffer[100]; 
    fread(buffer,sizeof(int),4,stdin); 
    int i=0; 
    while(i<4) 
    { 
     printf ("%d,\n",buffer[i]); 
     i=i+1; 
    }  
} 
+2

我们使用'char'是因为它合乎逻辑。根据ANSI C,它代表了ASCII编码中的一个字符(通常)。但是,如果您处理Unicode,情况会变得很奇怪。 –

+1

@ user1781308 - 我不确定你为什么被如此残酷地踢倒。对不起:(。一些评论:1)一个字符不是一个整数。但都是不可或缺的价值。 2)“缓冲区”传统上是字节数组。但他们不需要*。你的缓冲区可以是double [],some_struct []或者在你的情况下是int []。 3)“fread()”可以容纳不同元素宽度的缓冲区(比如int和char)。低级别的“read()”和“write() - 或套接字的读写操作 - 只需要字节缓冲区。”希望能够帮助.. – paulsm4

回答

3

非常简单:如果我们想要读取字节,我们使用char数组。

无论是文本字符串还是(更一般地)二进制对象。

“字节”通常是“int”的四分之一大小。此外,套接字“读取”和“写入”计数是字节计数。按照长期惯例,他们期望字节缓冲区。

'希望有帮助!

+0

如果我想用int数组创建缓冲区..? –

+0

你可以:)你的fread()例子完全是这样的,看看我上面的注释,然而, – paulsm4

+1

非常感谢你的帮助.. :) –

0

因为charC语言正好是1个字节。所以按字节写入文件是合乎逻辑的。

+0

小修正 - 没有*要求*一个字节为8位: http://en.wikipedia.org/wiki/Byte – paulsm4

相关问题