본문 바로가기
C, C++

빠른 문자열 복사

by lms0806 2024. 4. 29.
728x90
반응형

C언어로 문자열 복사 및 붙여넣기시, 다른 언어들과 다르게 +=을 사용할 수 없습니다. 이런 경우 C언어를 배우게 되면서 학습한 strcpy나 strcat을 활용하시면 됩니다.

 

그러나, strcat이나 strcpy를 활용해서 다량을 문자열들을 복사나 붙여넣기 하게되면 시간이 오래 소요되게 됩니다.

오늘은 strcat이나 strcpy가 아닌 다른 방식으로 같은 효과를 보면서 시간이 더 빠른 방법에 대해 알아보고자 합니다.

 

strcat을 보시면 strcpy를 활용하는 것을 볼 수 있습니다.

그러면 이런 생각을 하게 되죠.

'strcat을 하지말고 그냥 strcpy를 사용하면 되지 않아?'

맞습니다. strcat대신에 strcpy를 활용하게 된다면 아마 조금의 속도향상은 있을 겁니다.

그러나, 아직까지 속도가 느리다고 느끼게 될겁니다.

 

이런 경우 strncpy, strncat이라는 라이브러리를 사용하시면 됩니다.

strcpy에서 어디까지 복사할 건지 결정하고 복사하는 걸 strncpy, strcat에서 어디까지 붙여넣기 할 건지 결정하는 걸 strncat이라고 이해하시면 쉽습니다.

strcpy(문자열 배열 A, 문자열 B);
strcat(문자열 배열 A, 문자열 B);
strncpy(문자열 배열 A, 문자열 B, strlen(문자열 B));
strncat(문자열 배열 A, 문자열 B, strlen(문자열 B));

strcpy과 strcat, strncpy, strncat은 해당 방식으로 사용하실 수 있습니다.

 

strcat과 strcpy 대신에, strncat, strncpy를 활용할 경우 2배에 가까운 빠른 속도를 경험할 수 있습니다.

ex) strcpy, strcat, strcat -> strncpy, strncpy, strncpy ==> 800ms -> 400ms

 

그럼에도 strncpy와 strncat은 느리다는 것을 경험하게 됩니다.

그러면 더 좋은 방식은 없을까? 라고 생각하고 찾아보다가 sprintf라는 것을 발견하게 됩니다.

sprintf(문자열 A, "%s%s", 문자열 A, 문자열 B);

해당 방식으로 사용하게 된다면, 위에 알려드린 strcat 방식과 동일하게 문자열A에 문자열B를 붙일 수 있습니다.

기존 strcat,strcpy에서 strncat,strncpy로 바꾸면서 경험하신 속도보다 더 빨라진걸 확실하게 경험하실 수 있습니다.

ex) strncpy, strncat, strncat -> strncpy, sprintf ==> 400ms -> 1ms

 

strcat이나 strcpy는 특정 길이를 붙여서 하는 방식이 있는데 sprintf는 없을까?

있습니다. stackoverflow에 내용을 보면 sprintf보다 snprintf를 추천하는 내용이 있었습니다.

아무래도 어느정도 크기를 정하고 그정도만 값을 더하게 되면 문자열의 길이가 얼마나 되는지 미리 확인하고 이를 사용하여 필요한 메모리를 할당할 수 있습니다.

728x90
반응형

'C, C++' 카테고리의 다른 글

C의 문자열 복사  (0) 2024.04.21
C++로 Rest api 요청하기  (0) 2023.12.15

댓글