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::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 |
댓글