'scanf'에 해당되는 글 1건

  1. 2009.06.23 C 포인터 와 scanf buf에 대해
예전것/프로그래밍2009. 6. 23. 00:22
#include<stdio.h>

int main()
{
    char *str;
    
    scanf("%s", &str);
    printf("%s\n", &str);
}

위 프로그램을 실행 했을때 돌아간다.
str이 포인터 변수이지만 scanf에서 &str로 그 변수 안에 값을 써버린다.
그래서 printf해도 값이 나오는것이다. 물론 abc같은 짧은 문자를 쓰면 오류가 안나는데 adlkfasjd;lkfjasd같이 길게 쓰면 오류난다. (동적이 아니다. 이건 정적이라고볼수 있겠다.)

이경우에 우리는 *str을 이용하기 위해서 malloc 이라는 함수를 사용한다. char *str이 아무것도 가르키고 있지 않기 때문에 현재는 쓰레기 값이다. 그래서 malloc함수를 이용해 어느 한곳을 지정해준다.

#include
int main()
{
char *p;
p = (char*)malloc(20);
scanf("%s", p);
printf("%s", p);
free(p);
return 0;
}


#include
int main()
{
char p[20];
scanf("%s", p);
printf("%s", p);
return 0;
}
포인터 변수는 말그대로 어떤 주소값을 가리키고 있다.
그리고, 이 주소값이 가리키는 메모리영역에는 scanf로 받아들인 데이터를
저장하기 위한 어느정도의 공간이 할당되어야한다.
메모리를 잡아주어야한다.