我正在开发简单的服务器 - 客户端应用程序,现在我在服务器端读取文件时遇到问题。这是代码:
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。
有没有简单的方法来获取非空字节数?
答案 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()
。