获取非空字节数fread()

时间:2014-01-05 19:13:05

标签: c fread

我正在开发简单的服务器 - 客户端应用程序,现在我在服务器端读取文件时遇到问题。这是代码:

int size; 
for (i = 0; i < parts; i++) {
    size = fread(buffer, 1, 256, file);
    printf("size: %i \n", size);
    send(sockfd, buffer, size, 0);
    /* ... */
}

我认为如果fread()只能读取(例如)50个字节,那么大小将为50,但事实并非如此。它仍然是256。 有没有简单的方法来获取非空字节数?

2 个答案:

答案 0 :(得分:0)

如果您希望在buffer之后获得fread()的长度,为什么不使用strlen()

此外,依赖于fread()的返回值来读取字节数可能不是一个好主意。如果size(第二个版本)不是1,则可能会导致actual字节计数出现问题。

答案 1 :(得分:0)

size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream)返回成功读取的元素数。在OP的情况下,返回值256表示读取256 char

获取“非空字节”数量的简单方法需要一个简单的循环。

size_t size = fread(buffer, 1, 256, file);
size_t count = 0;
for (size_t i = 0; i< size; i++) {
  if (buffer[i] == '\0') count++;
}
number_of_not_null_bytes = count;

正如@Ron Burk所说,\0可能会散布在buffer中,需要选择处理才会传递给send()