无法让fwrite正常工作

时间:2015-04-21 14:08:18

标签: c file crash warnings fwrite

我正在尝试编写一个能够打开文本文件并将其拆分的程序,以便将其保存为两个新文件以更快地保存文件。但是使用我现在的代码,我无法打印从orignal文件中选择的字符到新的字符。

在我的文本文件中,我有“荷兰人很高”的文字。

在我想要的新文件中: 文件1:Dthpol r tl 文件2:uc epeaeal

这是我到目前为止的代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char cUsb1;
    char cUsb2;
    char str[128];

    FILE *ptr_readfile;
    FILE *ptr_usb1;
    FILE *ptr_usb2;

    ptr_readfile = fopen("Dutch People.txt","r"); // open readfile

    while(ptr_readfile != NULL) // keep running while readfile != null
    {
        if (ptr_readfile != EOF) // keep running while readfile != eof
        {
            cUsb1 = fgetc(ptr_readfile); // to get a char out of the readfile
            ptr_usb1 = fopen("USB1.txt", "w"); // create and open USB1 file
            fwrite(cUsb1 , str , str , ptr_usb1); //writing get c to file

            cUsb2 = fgetc(ptr_readfile); // to get a char out of the readfile
            ptr_usb2 = fopen("USB2.txt", "w"); // create and open USB2 file
            fwrite(cUsb2 , str , str, ptr_usb2); //writing get c to file

        fclose(ptr_usb1); // closing the file
        fclose(ptr_usb2); // closing the file
        }
    break;  // to stop the while loop
    fclose(ptr_readfile); // closing the file
    }

    return 0;
}

2 个答案:

答案 0 :(得分:0)

很多事情都不太对劲。您需要仔细查看编译器报告的警告 - 如果可能,启用所有警告(例如“-Wall”) - 并解决所有问题。然后使用调试器单步执行程序,直到它执行您不期望的操作。

作为起点,而不是:

 fwrite(cUsb1 , str , str , ptr_usb1);

你可能意味着

 fwrite(&cUsb1 , 1 , 1 , ptr_usb1);

该行应该有一个警告告诉你不应该尝试传递cUsb1(一个char)作为fwrite的第一个参数,因为该参数需要一个指针,即某个地址。使用&amp; cUsb1表示“cUsb1的地址”。

答案 1 :(得分:0)

您可以使用fputc一次写入一个字符。此外,不需要while循环。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int c;

    int i = 0;

    FILE *ptr_readfile = NULL;
    FILE *ptr_usb1 = NULL;
    FILE *ptr_usb2 = NULL;

    ptr_readfile = fopen("Dutch People.txt", "r"); // open readfile
    if (ptr_readfile != NULL) {
        ptr_usb1 = fopen("USB1.txt", "w"); // create and open USB1 file
        ptr_usb2 = fopen("USB2.txt", "w"); // create and open USB2 file
        if (ptr_usb1 != NULL && ptr_usb2 != NULL) {
            while ((c = fgetc(ptr_readfile)) != EOF) {
                if (i % 2 == 0) {
                    fputc(c, ptr_usb1);
                }
                else {
                    fputc(c, ptr_usb2);
                }
                i++;
            }
        }
        fclose(ptr_readfile); // closing the file
    }
    if (ptr_usb1 != NULL) {
        fclose(ptr_usb1);
    }
    if (ptr_usb2 != NULL) {
        fclose(ptr_usb2);
    }

    return 0;
}