포인터 : 문자열 순회와 조작에 관하여
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++
: 주소를 대리로 이동하기 때문에 원본의 값 또한 변경된다. 그러나 원본의 시작 주소는 건드리지 않고 있다.- 여기서 따로 배열을 만들어서 상수에 대응할 수 없는 이유는 지역변수는 메소드를 벗어나면 변수 데이터가 사라지기 때문이다.