Pointer guide; iterator and manipulate

🗓️

포인터 : 문자열 순회와 조작에 관하여

int    main(void)
{
//     char *src = "asdfG";
    char src[55] = {'a','s','d','f','G'};

    printf("%s\n", src);
    printf("%s\n", strupcase(src));
    return (0);
} 
  • char src[55] : 문자열 조작을 위해서 상수가 아닌 스택 또는 힙 영역으로 할당해야한다.
#include <stdio.h>

char    *strupcase(char *str)
{
    char *tmp_str;

    tmp_str = str;
    while(*tmp_str != '\0')
    {   
        if (*tmp_str >= 'a' && *tmp_str <= 'z')
        {
            *tmp_str -= 32;
        }
        tmp_str++;
    }
    *tmp_str = '\0';
    return (str);
}
  • tmp_str = str; : 단순히 포인터(문자열)를 순회하는것이 아닌 조작을 필요로 할때는 원본 주소를 보존한다. 그리고 대신 순회할 포인터 변수에 원본 주소를 받는다.
  • tmp_str++ : 주소를 대리로 이동하기 때문에 원본의 값 또한 변경된다. 그러나 원본의 시작 주소는 건드리지 않고 있다.
  • 여기서 따로 배열을 만들어서 상수에 대응할 수 없는 이유는 지역변수는 메소드를 벗어나면 변수 데이터가 사라지기 때문이다.