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 값 안의 길이를 구해주는 함수가 아닌건가요 ?

djm03178   4년 전

scanf는 string형에 입력을 할 수 없습니다. 12번째 줄은 string형에 대한 완전히 잘못된 사용이고, 다만 num이 나타내는 메모리 공간을 scanf가 제멋대로 보통 문자열로 우겨넣어서 저장했을 뿐입니다. 마찬가지로 printf도 string형을 출력하면 안 되지만, scanf가 억지로 넣었던 일반 문자열의 정보를 그대로 읽어서 출력했을 뿐입니다. num을 string형으로서 제대로 사용한 적이 없으니 num.length()를 호출해도 원하는 값이 안 나오는 건 당연합니다.

반면에 string num = "123"; 이라는 표현은 제대로 된 사용이고, 이때 printf가 num을 제대로 출력하지 못하는 것도 당연합니다. printf는 원래 string형을 출력할 수 없기 때문입니다. printf가 인식할 수 있는 문자열로 출력하게 하려면 num.c_str() 를 넘겨줘야 합니다.

djm03178   4년 전

그래서 C의 문법을 생각하면서 C++을 사용하면 안 됩니다. C를 공부하면서 배운 것은 C 문법 내에서 한정지어서 생각해야 하고, C++에서 추가된 개념들에 똑같이 적용하려고 하면 지금과 같은 혼동이 생깁니다. 클래스의 동작을 이해하면 왜 string이라는 객체를 scanf나 printf가 건드릴 수 없는지 알게 됩니다. C++을 먼저 제대로 공부한 뒤에 생각해 보세요.

kangsy763   4년 전

좋은 답변 감사합니다 기초적인 것을 모르고 있었네요 

댓글을 작성하려면 로그인해야 합니다.