2012-08-15 2 views
3

이 함수는 컴파일러에서 "문자열을 const char로 변환 할 수 없습니다"라는 메시지를 울립니다. 나 strlen에 문제가있다문자열을 const char으로 변환 할 수 없습니다.

void 
DramaticLetters(string s, short TimeLength) 
{ 
    for(int i = 0, sLen = strlen(s); i < sLen; i++){ 
     cout << s[i]; 
     Sleep(TimeLength); 
    } 
} 

, 나는

+5

그냥 사용'들 .length()'또는's.size()'. 문자열은 암시 적으로 문자 배열로 변환되지 않습니다. 길이가 아니라면 정말 필요하다.'s.c_str()'를 사용하라. – chris

+0

http://stackoverflow.com/questions/347949/convert-stdstring-to-const-char-or-char?rq = 1 – mkb

+1

일반적인 힌트 - 표준 기능에 문제가 생기면 99.99 %의 시간이 자신의 잘못입니다. – Cubic

답변

4

strlen()는 C const char* 문자열을 생각합니다. 문자열 길이를 가져 오려면 s.size() 또는 s.length()을 사용하십시오. string에서 C 문자열을 가져 오려면 s.c_str()을 사용하십시오.

C++ const char*stringstringconst char*를 변환 할 때 한 방향으로 만가는 것을 교환 할 수있다 보일 수 있지만

.

strlen을 사용하려는 이유가 없습니다. strlensize()처럼 결코 효과적이지 않을 루프로 정의되었을 가능성이 가장 큽니다. string 클래스의 길이 속성에 대한 게터가 가장 유사합니다. C++ 대안이없는 C 함수를 호출 할 때 string을 C 문자열로 변환하십시오.

1

C 및 C++ 문자열 기능을 함께 사용하지 마십시오. 대신 strlen() (C 스타일 기능)의, string::size()를 사용 : 여기

for(int i = 0, sLen = s.size(); i < sLen; i++) { 
    cout << s[i]; 
    Sleep(TimeLength); 
} 

당신이 클래스 string 모든 방법과 reference 있습니다.

+0

C++에서 모든 C 함수를 사용할 수있는 것은 아닙니다. – user1575615

+0

@ user1575615 C++은 많은 C 함수 (예 : 문자 배열 대신'std :: string' 클래스를 사용하고'strlen','strcpy' 등)를 "다시 구현"합니다. 그래도 C 스타일의 기능을 사용할 수 있습니다. 사실 C 언어처럼 보이는 C++ 프로그램을 만들 수 있지만 C++에서'std :: string' (C++의)과'strlen','strcmp' 등의 C와 C++ 솔루션을 섞어서는 안됩니다 (C). – betabandido

1

chris가 자신의 의견에서 말한 것처럼 strlen은 const char *에 사용되는 반면, 사용자는 string을 전달합니다.

for(int i = 0, sLen = s.length(); i < sLen; i++){ 
    cout << s[i]; 
    Sleep(TimeLength); 
} 
0

strlenchar const *에서 작동 대신

for(int i = 0, sLen = strlen(s); i < sLen; i++){ 
    cout << s[i]; 
    Sleep(TimeLength); 
} 

사용이의. 당신은 정말 당신이 strlen(s.c_str())을 할 수 싶었지만, 문자열에

0

몇몇 발언 문자 수를 반환하는 length() 방법을 포함하여 많은 기능, std::string가있는 경우 :

  • 당신이하지를 함수 내에서 문자열을 수정하면 const 참조를 더 잘 전달할 수 있습니다. (const string & s)

  • 문자열 자체는 길이를 가져 오는 메서드를 정의합니다. s.size() 및 s.length()는 모두 작동합니다. 추가 혜택은 모두이 방법은 당신이 정말로 s.c_str()를 사용 strlen 함수 사용하려는 경우 나 strlen

  • 의 선형 복잡성에 반대 복잡성에 대한 일정 : strlen(s.c_str())