我正在输入一个非常简单的C程序,它从文件中读取字符并显示它"加密"用(Caesar cipher)之后的3个字符替换每个字符。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *inFile;
int ch;
int ch1;
if (argc!= 2){
printf("Usage: Code <inputfile> [> Outfile]\n");
return(-1);
}
inFile = fopen(argv[1], "r");
while ((ch1=toupper(fgetc(inFile)))!='\0') {
ch=ch1;
if (ch >=33 && ch <=255) //exclude special chars
ch += 3;
putchar(ch);
}
printf("END\n");
fclose(inFile);
return 0;
}
我使用带有gcc encode.c
的gcc编译它,然后运行./a textfile
。接下来是&#34;编码&#34;然后,在2秒后,终端充满垃圾,特别是ascii square。我用Ctrl-C来逃避它。显然while循环永远不会结束,因为我从未看到END字符串。我想知道是否&#39; \ 0&#39;是问题,我用NULL替换它,但不仅问题仍然存在,但我在编译期间也收到警告。