C-打开一个文件并逐字符读取,并将文件指针作为参数传递
我很难理解何时应该传递指针以及指针指向的对象。在我的代码中:C-打开一个文件并逐字符读取,并将文件指针作为参数传递,c,file,stream,C,File,Stream,我很难理解何时应该传递指针以及指针指向的对象。在我的代码中: int checkFile(FILE fp) { int c; while((c = fgetc(*fp)) != EOF) { putchar(c); } fclose(*fp); } int main(int argc, char *argv[]) { FILE *fp = fopen(argv[0], "r"); char fileName = argv[1]; if(argc > 2) { print
int checkFile(FILE fp)
{
int c;
while((c = fgetc(*fp)) != EOF)
{
putchar(c);
}
fclose(*fp);
}
int main(int argc, char *argv[])
{
FILE *fp = fopen(argv[0], "r");
char fileName = argv[1];
if(argc > 2)
{
printf("Please supply a file!\n");
printf("usage: CheckParenthesis <file name>\n");
}
if (fp == NULL)
{
printf("Error! trying to open the file\n");
return 1;
}
else
{
checkFile(fp);
}
return 0;
}
int检查文件(文件fp)
我知道这里有几个问题,但我不知道什么是正确的:
1.我的论点正确吗?argv[0]和argv[1]似乎都是我指定的文件路径。。将此添加为我为获取argv信息而制作的打印输出:
测试:
结果:
There are 2 args, C:\Users\Dell\.CLion2016.2\system\cmake\generated\CheckParenthesis- 5dc89373\5dc89373\Release\CheckPare
nthesis.exe, C:\testing\brackets.txt
checkfile()
应该使用文件指针,而不是文件。将int checkFile(FILE fp)
更改为int checkFile(FILE*fp)
,然后在稍后的while look中,您应该将任何*fp
更改为fp
您的代码应该如下所示:
int checkFile(FILE* fp) {
int c;
while ((c = fgetc(fp)) != EOF) {
putchar(c);
}
fclose(fp);
}
int main(int argc, char *argv[]) {
FILE *fp = fopen(argv[0], "r");
char* fileName = argv[1]; // thanks to dvhh in the comments
if (argc > 2) {
printf("Please supply a file!\n");
printf("usage: CheckParenthesis <file name>\n");
}
if (fp == NULL) {
printf("Error! trying to open the file\n");
return 1;
} else {
checkFile(fp);
}
return 0;
}
int检查文件(文件*fp){
INTC;
而((c=fgetc(fp))!=EOF){
普查尔(c);
}
fclose(fp);
}
int main(int argc,char*argv[]){
文件*fp=fopen(argv[0],“r”);
char*fileName=argv[1];//感谢评论中的dvhh
如果(argc>2){
printf(“请提供一个文件!\n”);
printf(“用法:检查括号\n”);
}
如果(fp==NULL){
printf(“错误!试图打开文件\n”);
返回1;
}否则{
检查文件(fp);
}
返回0;
}
这应该会有所帮助,我还可以看看您是如何编译的吗?(假设您使用的是gcc)当作为参数传递时,您不需要取消对文件指针的引用,并且参数应该作为
file*
传递,而不是file
。从main
调用是正确的,但函数decl不是。它应该是int checkFile(FILE*fp)
和char fileName=argv[1]
错误,应该是char*fileName=argv[1]代码>为什么要打开argv[0]?argv[0]是可执行文件。您可能需要使用argv[1]谢谢它现在一切正常!!更改charfilename=argv[1]
tochar*fileName=argv[1]代码>谢谢你编译的很好!!我用克莱恩。。所以我在那里编译。现在的问题是它打印的是乱七八糟的内容,而不是文件的实际内容。@Eyzuky您希望它打印什么?我确实建议使用gcc或Visual Studio。另外,我认为clion是付费使用的。
There are 2 args, C:\Users\Dell\.CLion2016.2\system\cmake\generated\CheckParenthesis- 5dc89373\5dc89373\Release\CheckPare
nthesis.exe, C:\testing\brackets.txt
int checkFile(FILE* fp) {
int c;
while ((c = fgetc(fp)) != EOF) {
putchar(c);
}
fclose(fp);
}
int main(int argc, char *argv[]) {
FILE *fp = fopen(argv[0], "r");
char* fileName = argv[1]; // thanks to dvhh in the comments
if (argc > 2) {
printf("Please supply a file!\n");
printf("usage: CheckParenthesis <file name>\n");
}
if (fp == NULL) {
printf("Error! trying to open the file\n");
return 1;
} else {
checkFile(fp);
}
return 0;
}