본문 바로가기
C, C++

C의 문자열 복사

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

java나 C++같은 경우 문자열 복사를 수행할 때 += 이라는 연산자를 활용하여 가능합니다.

 

그러나 C언어의 경우 문자열 복사를 수행할 때 += 연산자를 사용할 수 없습니다.

또한 입력하고자 하는 문자열의 길이를 알지 못하면 해당 값을 저장할 수 없습니다.

 

java의 경우

String s = "";
String c1 = "1";

s += c1;

System.out.print(s);

이런식으로 가능하지만, C의 경우

 

char *c1 = "1";

char ch[strlen(c1) + 1];

strcpy(ch, c1);

printf("%s", ch);

이런식으로, 저장할 문자열의 길이를 저장한 이후, strcpy를 통해 값을 복사합니다.

 

이후에 다른 문자열을 추가할 경우에는 strcat을 통하여 값을 추가할 수 있습니다.

char *c1 = "1";
char *c2 = "2";

char ch[strlen(c1) + strlen(c2) + 1];

strcpy(ch, c1);
strcat(ch, c2);

printf("%s", ch);

 

매번 문자열을 추가할 때마다, 저장할 공간의 크기를 구한 후, strcpy와 strcat을 통하여 해야 하는 방법밖에 없나 해서 찾아본 결과

strlen의 레퍼런스를 확인해본 결과 https://en.cppreference.com/w/cpp/string/byte/strlen

 

std::strlen - cppreference.com

Returns the length of the given byte string, that is, the number of characters in a character array whose first element is pointed to by str up to and not including the first null character. The behavior is undefined if there is no null character in the ch

en.cppreference.com

std::size_t strlen(const char* start)
{
    // NB: start is not checked for nullptr!
    const char* end = start;
    while (*end != '\0')
        ++end;
    return end - start;
}

해당 형식으로 문자의 끝 문자 '\0'이 나올때까지 반복해서 값을 구하는 형식으로 진행을 하는 것으로 확인되었습니다.

 

결론적으로, 문자열의 길이를 알지 못하는 상황에서 += 연산을 수행하기 위해선

1. 더하고자 하는 문자열의 모든 길이를 알고 있는 상황이여야 한다.

2. 첫 문자는 strcpy로 복사를, 이후에 다른 단어들은 strcat을 통하여 연결을 하면 된다.

728x90
반응형

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

빠른 문자열 복사  (0) 2024.04.29
C++로 Rest api 요청하기  (0) 2023.12.15

댓글