skawngus11   5년 전

제가 생각했을 때는 for(k)문을 통해서 복사된 문자열 P의 길이는 strlen(str)*rePlay라고 생각했지만, 그것보다 훨씬 더 큰 길이가 나옵니다.

아무리 생각해도 그 이유를 모르겠습니다.

djm03178   5년 전

어떤 것을 근거로 그렇게 판단하셨는지를 적어주셔야 합니다.

추측하기로는 strlen(P)를 출력해보신 것 같은데, 그렇게 하면 그런 현상이 발생할 가능성이 큽니다. 왜냐하면, P는 초기화되지 않았고, strlen이 문자열의 길이를 판단하기 위해서는 반드시 널 문자를 만나야 하는데, 문자열 복사 과정에서 널 문자를 복사한 적이 없기 때문에 rePlay * strlen(str)번째 이후 원소들의 값은 무엇이 될지 알 수 없기 때문입니다.

gaelim   5년 전

음 그리고 반복문 문법 조건문에서 strlen을 쓰는 것은 위험한 행위입니다. 

string.size(), length()는 O(1) 이지만 strlen은 문자열 길이 만큼 탐색하여 길이를 반환하는 함수입니다. O(n) 라서 매 반복문 마다 수행하게된다면 수행복잡도는 O(n^2) 입니다

skawngus11   5년 전

다들 답변감사합니다. 

djm03178님께서 말씀하신대로 입니다. 덕분에 해결되었습니다.

gaelim님 strlen()대신에 적어주신 함수를 사용하면 될까요?

gaelim   5년 전

단순히 strlen 함수를 바깥으로 빼주셔도됩니다.

int len =strlen(str);

그리고 for문 의 strlen은 모두 len 으로 대체 하시면 됩니다

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