所以我将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>
我希望我能在这里找到一些帮助:)
答案 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的工作方式。