1){ 文件*fFile=fopen(argv[1],“r”); 双值=Utvardering(fopen(argv[1],“r”); 我不知道“乌特瓦德林”想要什么,也不知道它是如何使用这些信息的,c++,file,char,C++,File,Char" /> 1){ 文件*fFile=fopen(argv[1],“r”); 双值=Utvardering(fopen(argv[1],“r”); 我不知道“乌特瓦德林”想要什么,也不知道它是如何使用这些信息的,c++,file,char,C++,File,Char" />

C++;-将文件*转换为字符* 我找到了一个C++源文件,它从命令行参数(Agv[1)]计算表达式,但是现在我想把它改成读文件。 double Utvardering(char* s) { srcPos = s; searchToken(); return PlusMinus(); } int main(int argc, char* argv[]) { if (argc > 1) { FILE* fFile = fopen(argv[1], "r"); double Value = Utvardering(fopen(argv[1], "r")); cout << Value << endl; }else{ cout << "Usage: " << argv[0] << " FILE" << endl; } cin.get(); return 0; } double Utvardering(字符*s){ srcPos=s; searchToken(); 返回PlusMinus(); } int main(int argc,char*argv[]){ 如果(argc>1){ 文件*fFile=fopen(argv[1],“r”); 双值=Utvardering(fopen(argv[1],“r”); 我不知道“乌特瓦德林”想要什么,也不知道它是如何使用这些信息的

C++;-将文件*转换为字符* 我找到了一个C++源文件,它从命令行参数(Agv[1)]计算表达式,但是现在我想把它改成读文件。 double Utvardering(char* s) { srcPos = s; searchToken(); return PlusMinus(); } int main(int argc, char* argv[]) { if (argc > 1) { FILE* fFile = fopen(argv[1], "r"); double Value = Utvardering(fopen(argv[1], "r")); cout << Value << endl; }else{ cout << "Usage: " << argv[0] << " FILE" << endl; } cin.get(); return 0; } double Utvardering(字符*s){ srcPos=s; searchToken(); 返回PlusMinus(); } int main(int argc,char*argv[]){ 如果(argc>1){ 文件*fFile=fopen(argv[1],“r”); 双值=Utvardering(fopen(argv[1],“r”); 我不知道“乌特瓦德林”想要什么,也不知道它是如何使用这些信息的,c++,file,char,C++,File,Char,有两种可能: 1) Utvardering可以使用char*定义,但需要一个文件*(实际上,将char*视为void*)。我以前见过这种情况,尽管这是一种非常糟糕的做法。在这种情况下,只需将fFile强制转换为char*并将其传递 2) Utvardering可能需要一个以null结尾的字符串(char*)作为输入。如果像这样使用fopen,则可以使用将文件内容读入缓冲区(char[]),并将其传递给接受char*的函数。使用该函数将数据从文件*读入缓冲区。将该缓冲区发送到Utvardering

有两种可能:

1) Utvardering可以使用char*定义,但需要一个文件*(实际上,将char*视为void*)。我以前见过这种情况,尽管这是一种非常糟糕的做法。在这种情况下,只需将fFile强制转换为char*并将其传递


2) Utvardering可能需要一个以null结尾的字符串(char*)作为输入。如果像这样使用fopen,则可以使用将文件内容读入缓冲区(char[]),并将其传递给接受char*

的函数。使用该函数将数据从文件*读入缓冲区。将该缓冲区发送到Utvardering().

看起来您需要编写代码将文件读入字符数组并将其传递给
Utvardering


只要传递
fopen
的返回值,指针指向的不透明数据结构的地址就会被传递到
Utvardering
Utvardering
当这些字节不好时,会很高兴地将它们视为字符数据。不好。

函数fopen只打开一个文件。从那里获取字符串,您需要读取该文件。有多种方法可以实现此目的。如果您事先知道字符串的最大大小,则可以:

const int MAX_SIZE = 1024;
char buf[MAX_SIZE];
if (!fgets(buf, MAX_SIZE, fFile) {
  cerr << "Read error";
  exit(1);
}
double Value = Utvardering(buf);

这里是从文件中读取数据的好例子:
然后将缓冲区传递给您的函数

记住稍后将其fclose()!有点可笑,但我怀疑Utvardering()应该是瑞典的Utvärdering(),意思是Evaluation()。你在代码中不经常看到瑞典语单词,尤其是在SO上:)你可以在函数体中将MAX_SIZE声明为常量,也可以在函数外部将MAX_SIZE声明为全局常量。通常全局命名空间中的混乱越少越好,所以只需将其放在主函数中即可。我更新了示例,请参见上文。第一个示例没有设置t到char*,有什么想法吗?您能解释一下,“不设置为char*”是什么意思吗?为了调试,您可以在调用Utvardering:printf(“%s\n”,buf)之前添加这一行;以确保buf包含与您的文件相同的字符串。我得到以下错误:123 C:\Dev Cpp\Projects\TestLang\test1.Cpp无法将参数
3'的
char*”转换为
file*,
char*fgets(char*,int,file*)fgets的第三个参数应为fFile。是否声明并初始化为file*fFile=fopen(argv[1],“r”)?
ifstream in;    
in.open(argv[1]); 
if (!in) { /* report an error */ }
string str;
in >> str;