#include <stdio.h>
int main () {
FILE *fp;
char ch;
char data[100];
int i;
fp = fopen("file.txt","r");
i=0;
while( (ch=fgetc(fp)) != EOF) {
data[i]=ch;
i++;
}
i=0;
while(data[i]) {
printf("%c",data[i]);
i++;
}
return 0;
}
file.txt的内容:
udit@udit-Dabba /opt/lampp/htdocs $ cat file.txt
aGVsbG9teW5hbWVpc2toYW4K
计划的输出:
udit@udit-Dabba /opt/lampp/htdocs $ sudo vim test.c
udit@udit-Dabba /opt/lampp/htdocs $ sudo gcc test.c
udit@udit-Dabba /opt/lampp/htdocs $ ./a.out
aGVsbG9teW5hbWVpc2toYW4K
P�udit@udit-Dabba /opt/lampp/htdocs $
为什么这两个额外的字符出现在数组的输出中...... ??? 输入文件实际上是base-64编码的结果。
答案 0 :(得分:1)
你没有终止数据[]数组 - 没有什么可以在输入的末尾加零,所以当你把它写出来时,你要在数据末尾打印额外的(随机)值,直到你碰巧碰到了零,
记住数据未初始化为c
中的任何内容答案 1 :(得分:1)
它看起来像是因为你没有在开始之前将数据设置为零。尝试添加
memset(data,0,sizeof(data));
在你阅读之前额外的输出是在你开始使用它之前在该位置的内存中发生的事情。
答案 2 :(得分:1)
第一个循环以EOF
终止,您不会写入data
数组(因为您不能)。
第二个循环以'\0'
终止,而data
数组中没有{。}}。
我建议您在阅读'\0'
后添加终止EOF
。
答案 3 :(得分:1)
fgetc会返回int
而不是char
。
看看这是否适合您:
#include <stdio.h>
int main (void) {
FILE *fp;
int ch;
int data[100] = { 0 }; // Easiest way of initializing the entire array to 0
int i;
fp = fopen("file.txt","r");
i=0;
while( (ch=fgetc(fp)) != EOF) {
data[i]=ch;
i++;
}
// data[i]=0; -->You did not provide a terminating point -
// Not needed if the array is initialized the way i did.
i=0;
while(data[i]) {
printf("%c",data[i]);
i++; }
return 0;
}