什么可能导致fwrite()函数这么慢

时间:2013-09-15 01:45:36

标签: c fwrite

我正在写聊天* ptr的文件,但是我需要很长时间才能完成。 我不知道为什么。

for(int i = 1; i < 64048; i++){
    if(ptr[i] != NULL){
        fwrite(ptr[i], 1, strlen(ptr[i])-6, file);
        free(ptr[i]);
    }
}

有一些char指针存储8186个字节,我想写入文件,但时间太长了。

我有64048块字符串需要写入文件。

什么可能导致减慢fwrite()??

谢谢

1 个答案:

答案 0 :(得分:3)

OP正在使用错误的方法来调整fwrite()的大小,以及其他小错误。

如果“存储8186字节的char指针数组”表示
1每个char数组有8186个重要字节的数据,使用大小8186 2每个char数组都是一个NUL终止的字符串,然后需要进行测试以确保每个数组的长度至少为6.不确定这6是什么。 注意:size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream )

我怀疑当- 6小于6时OP的strlen(ptr[i])导致问题。这会使负差异为非常size_tcount中的fwrite()通常是未签名的。

for(int i = 0; i < 64048; i++){  // start at 0
    if(ptr[i] != NULL){
        int result; 

        result = fwrite(ptr[i], 1, 8186, file);
        if (result != 8186) ; handle error;

        // or

        size_t len = strlen(ptr[i]) + 1; /// Add 1 for the NUL byte
        if (len < 6) ; handle error of whatever the OP's 6 is about.
        result = fwrite(ptr[i], 1, len, file);
        if (result != len) ; handle error;

        free(ptr[i]);
    }
}