2014-10-18 3 views
1

나는 다음과 같은 간단한 일을하기 위해 모든 노력을 다 해왔다 :문자열을 문자 포인터로 변환하려고합니까?

1) stdin으로부터 입력 문자열을 받는다.

2)이 테이블을 char 포인터로 변환하면 테이블/palindrome 찾기 함수로 전달할 수 있습니다.

2 단계의 후반부에는 확신하지만 해킹 할 수없는 형식 계약입니다. 아래 질문은 내 몸입니다. palin 기능의 프로토 타입은 int palin(char *str)입니다.

int main() 
{ 
    string input; 
    cin >> input; 
    char seq[] = input.c_str(); //Error here, invalid initialization? 
    int len = strlen(seq); 
    int result = palin(seq); 
    cout << result; 
    getchar(); 
    return 0; 
} 

아이디어가 있으십니까? c_str() 변환은 또한 상수 포인터 char을 기대하지만 문제가됩니다. 그러나 char 포인터가 변경됩니다.

+0

문자의 X의 [을 시도 할 수 있습니다 ] 컴파일시 알려진 크기 여야합니다. 또한,'const char *''char *'가 아닌'const char *'를 반환한다. – Creris

+0

만약'palin()'이 단지 문자열을 읽는다면'const char * seq = input.c_str();' *).') 그렇지 않으면 strcpy를 새로운 char 배열로 가져와야 할 것이다. –

+0

위의 제안 된 중복 본 적이 있지만 const char 않습니다 나를 위해 않습니다. 그것은 변경할 수 있어야합니다. –

답변

2

실제로 당신이 페일 린에 전달 변경 가능한 버퍼, 같은 뭔가에 문자열을 복사해야 변경 가능해야하는 경우 :

int main() 
{ 
    string input; 
    cin >> input; 
    char seq[input.length() + 1]; 
    memcpy(seq, input.c_str(), sizeof seq); 
    int result = palin(seq); 
    cout << result; 
} 
+0

비표준 기능을 사용하면 힌트를 나타낼 수 있습니다 – Creris

+1

좋은 점은 char seq [input.length() + 1]; 동적 메모리 관리 기능이 표준을 준수합니다. – Bishop

0

당신은에서는 StrDup

char *c = strdup(str.c_str()); 

// Do stuff with c 

// Make sure to free c when you are done.  
free(c) 
관련 문제