2014-06-25 1 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

역 참조 inin*이 아니라 *in으로 기록됩니다. (고정 된 경우에도 NULL을 참조 해제하려고 시도 할 때 프로그램이 작동하지 않고 getline의 두 번째 인수가 잘못된 유형이됩니다. char* 문자열은 사용자가 생각하는대로 작동하지 않습니다.)

+0

'std :: getline (std :: cin, * in)'과'std :: getline (std :: cin, in)'에 일치하는 오버로드조차 없다! (그리고 올바르게) –

0

은 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"; 
} 
관련 문제