2014-06-25 39 views
-5

當我在函數中使用解引用作爲參數時,預處理器吐出一個錯誤。 我相信括號之前的*就會導致編譯器不明確。 有什麼辦法可以解決這個問題嗎?解除引用會導致錯誤:''''令牌之前的預期主表達式

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

錯誤在標記的行上。 謝謝!

+1

有沒有除我以外的人看到這個問題:「爲什麼不是我的計劃仍然* *無法更改爲'* in'後編譯」? – WhozCraig

回答

1

提領in寫作*in,而不是in*。 (另外,即使修復了這個問題,你的程序仍然無法工作,因爲你試圖取消NULL,而第二個參數getline將會有錯誤的類型。char*字符串不會按照你認爲它們工作的方式工作。)

+0

對於'std :: getline(std :: cin,* in)',甚至沒有'std :: getline(std :: cin,in)'的匹配重載! (和正確的) –

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"; 
} 
相關問題