0

我找到了一个 C++ 源文件,它从命令行参数 (argv[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;
}

然而,Utvardering 函数需要一个 char* 参数。如何将从文件 fopen 读取的数据转换为 char*?

4

5 回答 5

6

使用fread()函数将 FILE* 中的数据读入缓冲区。将该缓冲区发送到 Utvardering()。

于 2009-06-11T21:28:17.073 回答
6

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);

注意:此方法适用于 C,而不适用于 C++。如果你想要更多地道的 C++ 代码,你可以使用这样的东西(而不是 FILE 和 fopen):

ifstream in;    
in.open(argv[1]); 
if (!in) { /* report an error */ }
string str;
in >> str;
于 2009-06-11T21:35:34.467 回答
1

我不知道“Utvardering”期望什么,或者它如何使用这些信息。

有两种可能——

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

2) Utvardering 可能期望以空字符结尾的字符串 (char*) 作为输入。如果您像这样使用 fopen,您可以使用fread将文件内容读入缓冲区 (char[]),然后将其传递给采用 char* 的函数。

于 2009-06-11T21:26:45.720 回答
0

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

仅传递 的返回值fopen将导致该指针指向的不透明数据结构的地址被传递给UtvarderingUtvardering当它们不是时,会很乐意将这些字节视为字符数据。不好。

于 2009-06-11T21:30:17.927 回答
0

从文件中读取数据的好例子:http: //www.cplusplus.com/reference/clibrary/cstdio/fread/ 然后将缓冲区传递给您的函数

于 2009-06-11T21:36:03.623 回答