2014/06/06 15:54
http://blog.naver.com/chhh92/220022245722
char *str와 char str[]은 문자열을 담기위해 사용합니다. 용도는 같더라도 담는 방법이 다릅니다. 잘 알고 상황에 맞게 문자열을 담으면 되겠습니다.
당연한 소리지만, char *str는 포인터고 char str[]는 배열입니다. 얼핏 보면 둘다 문자열을 담거나 작업할때 쓰여서 같아보일지라도, char *str도 char str[]처럼 "선언과 동시에 초기화"를 할 경우 확실하게 차이가 납니다.
우선 역할을 보면 char *str은 주소를 담고, char str[]은 값을 담습니다. 만약 선언과 동시에 초기화 할때 문자열 상수를 주어질때,
1
2 |
char *str1 = "hoochoona";
char str2[] = "hoochoona"; |
char *str1은 문자열 상수의 주소를 담게되고,
char str2[]은 문자열 값을 가져옵니다.
선언과 동시 초기화 할때 []는 오른쪽 값의 갯수를 세어 컴파일러가 알아서 배열 최대 개수를 적어줍니다.
때문에 이 두개를 sizeof로 출력하면 str1은 주소이므로 4바이트가, str2는 값의 길이를 출력합니다.
이 둘은 또 엄연히 차이가 있는데 str1은 문자열의 값을 바꿀수가 없고 str2는 값을 바꿀수 있습니다. str1은 문자열 상수의 주소를 받았으니까요.
때문에 초기화하는 문자열에 대해 앞으로 변경되면 안될 경우 char *str로 초기화를 하고 변경될 예정일 경우 char str[]로 선언하면 됩니다.
이 둘의 차이는 strtok을 사용해봐도 알 수 있습니다.
1
2 |
char *str1 = "a,b,c,d,e,f,g";
char str2[] = "a,b,c,d,e,f,g"; |
strtok은 문자열을 자르기위해 내부적으로 원본 문자열을 변경합니다. 때문에 strtok같은 경우 1번째 줄로 선언해서 파라미터로 넘겨줄 경우 에러를 발생합니다.
'Software Development > Algorithm' 카테고리의 다른 글
탐색기반 알고리즘 설계_1.선형구조탐색 (0) | 2016.01.17 |
---|---|
Quick sort source (0) | 2016.01.17 |
알고리즘 메모 (0) | 2015.03.31 |
동적 계획법(Dynamic Programming)_1.개념 (0) | 2015.03.26 |
분할정복(Divide and Conquer) - 2. 병합정렬 (0) | 2014.06.25 |