将char打印到文件会产生奇怪的结果

时间:2016-03-02 19:27:09

标签: c file io char file-writing

所以我将char打印到一个文件中,每当行结束时它只会做一些奇怪的事情。

这是我使用的代码:

void opdracht43() {
    FILE *file;
    FILE *file2;
    file = fopen("opdracht1.1.cpp", "r");
    file2 = fopen("Disc.c", "w");
    int p;
    char a[100];
    while (fgets(a, 100, file)) {
        for (int i = 0; i < sizeof a; i++) {
            if (a[i] == '\n' || a[i] == ' ' || a[i] == '\t') {
                printf("TRUE");
            }
            else {
                printf("FALSE");
                fputc(a[i], file2);
            }
        }
        return 0; //So it only prints the 1st line for now.
    }
    fclose(file);
    fclose(file2);
}

当这运行时,这是它给出的文字:

#include<stdio.h> ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ

&gt;之间的空间并且Ì给了我一个奇怪的黑色nul in notepad ++

该文件的第一行是:

#include<stdio.h>

我希望我能在这里找到一些帮助:)

2 个答案:

答案 0 :(得分:0)

更改

for (int i = 0; i < sizeof a; i++) {

for (int i = 0; a[i] != '\0' && i < sizeof a; i++) {

在您的情况下,在fgets()的第一次调用中,数组a会显示这些值:'#','i','n','c',...,'o' ,'。','h','&gt;'和'\ 0'。但是,a的其余部分仍然包含Ì之类的垃圾,因为a从未初始化。

'\ 0'就是你提到的“怪异的黑色nul”。 '\ 0'是C风格字符串结尾的信号,但它不代表文件的结尾,因此不应使用fputc() <写入“Disc.c” / p>

答案 1 :(得分:-1)

sizeof a是变量a的大小,以字节为单位,始终为100.您希望使用a中保存的字符串的长度限制循环,即{ {1}}。

此外,您不应该逐个字符地写入文件流。那不是文件I / O的工作方式。