2009-06-11 178 views
0

我发现,其计算从一个命令行参数表达式C++源文件(的argv [1]),但是我现在想改变它读取文件。C++ - 转换FILE *为char *

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 *参数。如何将从文件读取的数据转换为char *?

+0

有趣的,但我怀疑Utvardering()应该是瑞典Utvärdering(),这意味着评估()。通常你不会在代码中看到瑞典语的单词,特别是不会出现这种情况:) – ralphtheninja 2009-06-11 23:15:07

回答

5

函数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++代码,你可以使用这样的事情(而不是文件和FOPEN):

ifstream in;  
in.open(argv[1]); 
if (!in) { /* report an error */ } 
string str; 
in >> str; 
+0

MAX_SIZE声明在哪里? – 2009-06-12 18:05:26

1

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

有两种可能性 -

1)Utvardering可以使用字符*,但期待一个FILE *(实际上,治疗的char *被定义状空隙*)。我以前见过这个,尽管这是非常糟糕的做法。在这种情况下,只投ffile的为char *,并传递它。

2)Utvardering可以期待一个空终止字符串(字符*)作为输入。如果您使用这样的fopen,您可以使用fread将文件内容读入缓冲区(char []),并将它传递给您的函数,该函数需要char *。

6

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

+0

记得在之后使用fclose()! – 2009-06-11 23:11:42

0

看起来你需要编写代码,以文件读入到一个字符数组,并传递至Utvardering

仅仅传递返回值fopen将导致该指针指向的不透明数据结构的地址被传递给UtvarderingUtvardering将愉快地将这些字节作为字符数据处理,否则。不好。