제가 수업중이라 확인이 힘든데 scanf .c_str이 정상적으로 돌아가는지 봐 주세요
1652번 - 누울 자리를 찾아라
원래 string형에는 scanf로 입력을 받으면 안 됩니다. 반드시 그 객체와의 올바른 상호작용을 통해 받아야 합니다.
단순히 c_str()를 넘겨주는 것은 그 객체가 문자열을 실제로 담고 있는 주소를 주는 것 뿐이고, 그 주소로부터 몇 바이트가 실제로 할당되어있는지 같은 건 scanf가 모릅니다. 그저 그 위치에 문자열을 쭉 저장할 뿐입니다. 할당된 메모리를 넘어서 scanf가 저장할 수도 있습니다. 뿐만 아니라 string 객체는 자기는 문자열을 받은 적이 없으니 size나 capacity도 전혀 변화시키지 않을 것입니다.
감사합니다
문제가 꽤 많았네요 c_str로 해결할 수 있을 줄 알았어요 cin 입력이 생각보다 시간이 많이 잡아먹으니까 되도록 안쓰려 했었거든요
만약 문자로 구성된 이차원 배열을 받고 싶다면 c++ string으로 선언해서 cin으로 한 줄씩 받는 거 외에는 답이 없나요??
c언어로 scanf("%c",&a[i]); 이런식으로 하면 엔터도 입력에 들어가는 것 같은데 한 줄 입력받고 뒤에 getchar()로 받아줘도 한 줄씩 밀리더라구요..
제가 잘못이해했을 수도 있구요
매번 문자로 된 배열에서 입력부분에서 막힙니다 ㅎㅎ ㅠㅠ
string 대신에 char 배열을 쓰면 됩니다. 그러면 scanf("%s")로 입력받을 수 있습니다.
그리고 cin이 느린 건 https://www.acmicpc.net/problem/15552 를 참고해서 빠르게 만들 수 있습니다.
댓글을 작성하려면 로그인해야 합니다.
gofkdvjvl 4년 전
제 방식대로 풀어보고 싶어서 난리치고 있는데 백준에서는 런타임 에러때문에 아예 돌아가지 않네요 ㅠㅠ