2017-10-26 44 views
0

argv[]의 문자열 요소를 콘솔에 인쇄하려고하지만 어떤 이유로 든 출력이 잘못되었습니다. 회상을 테스트하는 내 프로그램이 제대로 작동하는 것 같습니다. 꺼져있는 유일한 부분은 엘리먼트 int argv[]을 콘솔에 출력하려고 할 때입니다. 콘솔에서 방금 테스트 했었습니다. 여기 * argv []를 사용하는 비정상적인 출력

for (int i = 1; i < argc; i++) { 
    string s(argv[i]); 
    printf("s: %s\n",s); 
    if (ignoreCase) { 
     for (int j = 0; j < s.size(); j++) { 
      tolower(s.at(j)); 
     } 
    } 
    if (ignoreSpaces) { 
     s = removeSpaces(s); 
    } 
    if (isPalindrome(s, 0, s.size() - 1)) { 
     printf("%s is a palindrome.\n",s); 
    } 
    else { 
     printf("%s is not a palindrome.\n",s); 
    } 
} 

내가 무엇입니까 출력입니다 : 여기

이 다루는 내 코드입니다 enter image description here

+0

당신이 공유 할 수있는 오류 또는 예상과 실제 출력? –

+0

@Saram ali 예, 내 게시물을 업데이트했습니다. 처음에 추가하려고했으나 잊어 버렸습니다. – McFizz

+1

'printf ("s : % s \ n", s);'- 그렇게하지 마십시오. 'printf' 함수는'std :: string'에 관해서 아무것도 모릅니다. 코드가 그대로 있으면 정의되지 않은 동작이 호출됩니다. – PaulMcKenzie

답변

3

말 때문에 당신이 cout을 사용할 수 없습니다, 당신은 printf를 사용하지 않는 바르게. printf을 사용하고 있는데 printf은 (std::string)을 알지 못하므로 프로그램에서 정의되지 않은 동작을 호출합니다.

해결 방법은 printf이 알고있는 유형을 사용하는 것입니다. std::string에는 c_str() 함수가있어 const char *을 반환하므로 대신 사용하십시오. 이 같은

그래서 대신 라인 :

printf("s: %s\n",s); 

이를 수행

printf("s: %s\n",s.c_str()); 
+0

나는 그 문제가 그 라인을 따라 무엇인가 느꼈다. 그 문제를 해결해 주셔서 감사합니다! – McFizz