当我在函数中使用取消引用作为参数时,预处理器会发出错误。 我相信括号前面的*会导致编译器出现歧义。 有没有办法解决这个问题?
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int main ()
{
char *in = NULL;
char *out = NULL;
getline(cin,in*);//error
out=system(in*);//error
printf(out);
return 0;
}
错误在标记的行上。 谢谢!
答案 0 :(得分:1)
取消引用in
写为*in
,而不是in*
。 (另外,即使已修复此问题,您的程序仍然无效,因为您尝试取消引用NULL
,而getline
的第二个参数将使用错误的类型。char*
字符串不像你认为的那样工作。)
答案 1 :(得分:0)
getline
仅适用于C ++字符串(不是C风格的字符串)。 C ++字符串可以随时分配内存,以响应读取的数据量。
还有其他用于读取C字符串的函数,但您必须预先分配所需的内存量,并且还要为函数指定已分配的内存量。一般来说,没有理由这样做,因为C ++字符串版本更简单,更不容易出错。
另外,避免包含C风格的标准标题(即以.h
结尾)并避免使用指针。 system
返回一个int,而不是一个字符串。
示例:
#include <iostream> // cin, cout
#include <string> // string
#include <cstdlib> // system
int main()
{
std::string s;
std::getline( std::cin, s );
int system_result = std::system( s.c_str() );
std::cout << system_result << "\n";
}