stl - string - resize 함수에 대해...

2015. 9. 7. 18:44IT-개발/STL 및 Boost

반응형
요거 땜에 오늘 하루 죙일 삽질 좀 했네요~ 에거~ ㅠㅠ

string의 resize() 함수에게 속지 맙시다~ 그리고 string의 기능에 대해서 좀더 잘 알아둘 필요가 있을거 같에요

일반적으로 

char str1[100] = "111";

char str2[100] = "222";


strcat(str1, str2); 이렇게 하면


당연히


str1 의 Data는 "111222" 이렇게 된다고 생각합니다.... 당연한겁니다... 근데, STL string의 resize 라는 함수를 쓰는


순간 이렇게 동작하지 않게 됩니다.


strcat 함수 같은 경우 보면, 문자들을 붙여주는 기능을 하는 기준이 NULL 문자를 제외한 문자들 간의 연결입니다.


그런데, string은 그렇지 않더군요. 내부 적으로 size, capacity를 운영하는 string에서는 size 숫자 값에 따라 append


+= 함수의 결과가 달라 지더군요.. 이렇게 설명하면 당연히 무슨소리야~ 하겠죠~ 그래서. example!!!!


string1 str1 = "aaa";

string str2 = "bbb";


이라고 합니다. 일반적으로


str1 += str2; 


이 결과는 str1 == "aaabbb" 입니다.


그런데, 


str1.resize(50);


str1 += str2;


요렇게 하면, "aaabbb" 일거 같지만, 결과는 "aaa\0\0\0\0......bbb"가 됩니다. 


str1.append(str2);


요거 마찬가지 입니다. resize() 함수에 대해서 msdn이나 다른거 보면 간단하게 그냥 buffer 량을 늘리는게 아니라


실제 data 량을 입력숫자 만큼 늘려 주는 거라고 하는데, 이게 늘게 되면 사용자가 늘린 buffer 량 만큼입력된 data가


NULL 문자라고 해도 문자처리에서 반드시 추가적으로 인식되어 처리되더군요~ 그래서 몇시간 동안 삽질... resize() 함수로


강제로 strlen() 같은 걸로 길이 알아 내어서 다시 줄여줬죠~ ㅠㅠ. 이런거 보면 MFC CString이 더 나은듯~


예전에도 한번 이거 때문에 고생한거 같은데~ 또다시한번 당한듯한 기분~ 몇년 시간이 지나면 까먹기 마련인데~


에고~~ Blog에 남겨나 놓자~


resize 쓸일 없다구요??? 나도 그런줄만 알았네요~ 일하다보면 쓸일 생깁니다. ㅠㅠ.


***. VS Debug모드로 확인하시면 도움 많이 됩니다. 그럼~