2014-06-08 6 views
-5

C++에서 많은 경험이 없습니다. 기능이 있습니다 std::string Exec(char* cmd). cout<<Exec("hello!")에 대해 실행되지만 std :: string에 대해 실행되지 않습니다 : 'const char *'에서 'char *'로의 잘못된 변환. 내가 어떻게 고칠 수 있는지 궁금했다.'const char *'에서 'char *'로의 변환이 잘못되었습니다.

std::string s="hello"; 
char * c = s.c_str(); 
Exec(c); 
+7

이'표준 : : 문자열 Exec에서 (CONST의 char *에 cmd)'합니다. – juanchopanza

+1

글쎄, 당신의 함수는'char *'를 변형시킬 수 있기 때문에, const이기 때문에 그렇게 할 수 없습니다. juanchopanza가 말했듯이, 기능 서명을 변경하십시오. –

+0

oops; 나는 그 질문을 편집했다. –

답변

3

음 : 마찬가지로 전에 언급

const char * c = s.c_str(); 

std::string Exec(const char* cmd) 

에 함수 선언을하고 ' 다시 가봐야 겠어. 두 경우에 당신이 그것에 상수 문자열을 전달하고 있기 때문에 See it live here.

0

당신이 당신의 프로토 타입을 변경해야

std::string Exec(const char* cmd) 

당신이 인수로 const char*을 전달하려는 때문이다.

그렇지 않으면 char*을 인수로 전달할 수 있습니다.

그 이유는 귀하의 cout<<Exec("hello!")이 작동합니다. 그 이유는 인수가 비 const로 전달 되었기 때문입니다. c_str()const char *을 반환하지 않는 char *

그냥 라인에 변경하기 때문입니다

0

당신이 시도하는지에 대한 올바른 서명

std::string Exec(const char* cmd) 

이 될 것입니다. Exec("hello") 경우 컴파일하더라도, 그게 사용이 안전 의미하지 않습니다

#include <iostream> 
using namespace std; 

std::string Exec(char* cmd) { 
    cout << cmd; 
    cmd[0] = 'S'; // Undefined behavior 
    cout << cmd; 
    return std::string(""); 
} 

int main() { 
    Exec("hello"); 
    return 0; 
} 

http://ideone.com/ZY6Atr

관련 문제