scanf는 string형에 입력을 할 수 없습니다. 12번째 줄은 string형에 대한 완전히 잘못된 사용이고, 다만 num이 나타내는 메모리 공간을 scanf가 제멋대로 보통 문자열로 우겨넣어서 저장했을 뿐입니다. 마찬가지로 printf도 string형을 출력하면 안 되지만, scanf가 억지로 넣었던 일반 문자열의 정보를 그대로 읽어서 출력했을 뿐입니다. num을 string형으로서 제대로 사용한 적이 없으니 num.length()를 호출해도 원하는 값이 안 나오는 건 당연합니다.
반면에 string num = "123"; 이라는 표현은 제대로 된 사용이고, 이때 printf가 num을 제대로 출력하지 못하는 것도 당연합니다. printf는 원래 string형을 출력할 수 없기 때문입니다. printf가 인식할 수 있는 문자열로 출력하게 하려면 num.c_str() 를 넘겨줘야 합니다.
kangsy763 4년 전
c++ 을 이용하여 string 값을 다루는데 이상한 점이 많이 발견되어서 질문글을 올렸습니다.
코드 그대로 하게되면 string 값 출력은 잘 되는데 num.length 값은 0이 나옵니다.
이 코드를 scanf 대신 cin 을 이용해서 입력을 하게되면 string 값은 이상한 값이 출력되고 num.length 값은 정상적으로 출력이 됩니다.
이 코드를 num 값을 따로 입력받지 않고 정해져있는 string num="123" 줄을 사용하게 되면 string 값은 이상한 값이 출력이 되고 num.length값은 정상출력됩니다.
무슨 차이가 있길레 이렇게 되는건가요 ? cin 이 단순 scanf 와 같은것이 아닌건가요 ? string.length() 는 단순히 string 값 안의 길이를 구해주는 함수가 아닌건가요 ?