C 是什么原因导致fwrite()函数如此缓慢

C 是什么原因导致fwrite()函数如此缓慢,c,fwrite,C,Fwrite,我正在将chat*ptr文件写入文件,但我花了很长时间才完成。 我不知道为什么 for(int i = 1; i < 64048; i++){ if(ptr[i] != NULL){ fwrite(ptr[i], 1, strlen(ptr[i])-6, file); free(ptr[i]); } } for(int i=1;i

我正在将chat*ptr文件写入文件,但我花了很长时间才完成。 我不知道为什么

for(int i = 1; i < 64048; i++){
    if(ptr[i] != NULL){
        fwrite(ptr[i], 1, strlen(ptr[i])-6, file);
        free(ptr[i]);
    }
}
for(int i=1;i<64048;i++){
如果(ptr[i]!=NULL){
fwrite(ptr[i],1,strlen(ptr[i])-6,file);
自由(ptr[i]);
}
}
有一个存储8186字节的字符指针数组,我想写入文件,但时间太长了

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

什么会导致fwrite()变慢


谢谢

OP使用了错误的方法来调整
fwrite()
,以及其他一些小错误

如果“存储8186字节的字符指针数组”表示
1每个
char
数组有8186个有效字节的数据,使用大小8186。
2每个
char
数组都是以NUL结尾的字符串,然后需要进行测试以确保每个数组的长度至少为6。我不知道这是怎么回事。 注:
size\u t fwrite(const void*ptr、size\u t size、size\u t count、FILE*stream)

strlen(ptr[I])
小于6时,我怀疑OP的
-6
导致问题。这将使负差a非常大
size\u t
,通常在
fwrite()
中对
count
无符号

for(int i=0;i<64048;i++){//从0开始
如果(ptr[i]!=NULL){
int结果;
结果=fwrite(ptr[i],18186,文件);
如果(结果=8186);处理错误;
//或
size\u t len=strlen(ptr[i])+1;///为NUL字节添加1
if(len<6);处理OP的6的错误。
结果=fwrite(ptr[i],1,len,file);
if(result!=len);处理错误;
自由(ptr[i]);
}
}

OP使用了错误的方法来调整
fwrite()
,以及其他一些小错误

如果“存储8186字节的字符指针数组”表示
1每个
char
数组有8186个有效字节的数据,使用大小8186。
2每个
char
数组都是以NUL结尾的字符串,然后需要进行测试以确保每个数组的长度至少为6。我不知道这是怎么回事。 注:
size\u t fwrite(const void*ptr、size\u t size、size\u t count、FILE*stream)

strlen(ptr[I])
小于6时,我怀疑OP的
-6
导致问题。这将使负差a非常大
size\u t
,通常在
fwrite()
中对
count
无符号

for(int i=0;i<64048;i++){//从0开始
如果(ptr[i]!=NULL){
int结果;
结果=fwrite(ptr[i],18186,文件);
如果(结果=8186);处理错误;
//或
size\u t len=strlen(ptr[i])+1;///为NUL字节添加1
if(len<6);处理OP的6的错误。
结果=fwrite(ptr[i],1,len,file);
if(result!=len);处理错误;
自由(ptr[i]);
}
}

需要多长时间?您正在编写的文件大小为8186 x 64048,或超过500MB。我明白为什么要花很长时间。你有没有办法避免给斯特伦打电话?大概花了10分钟,我需要通过UDP传输超过1GB的文件。目前,我只测试了500MB。但是在我的本地主机上,只需要几秒钟就可以完成,但是在Emulab上,编写速度相当慢!需要多长时间?您正在编写的文件大小为8186 x 64048,或超过500MB。我明白为什么要花很长时间。你有没有办法避免给斯特伦打电话?大概花了10分钟,我需要通过UDP传输超过1GB的文件。目前,我只测试了500MB。但是在我的本地主机上,只需要几秒钟就可以完成,但是在Emulab上,编写速度相当慢!
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]);
    }
}