取消引用会导致错误:')'令牌之前的预期主要表达式

时间:2014-06-25 01:23:40

标签: c++ dereference

当我在函数中使用取消引用作为参数时,预处理器会发出错误。 我相信括号前面的*会导致编译器出现歧义。 有没有办法解决这个问题?

#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;
} 

错误在标记的行上。 谢谢!

2 个答案:

答案 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";
}