#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로 받아들인 데이터를
저장하기 위한 어느정도의 공간이 할당되어야한다.
메모리를 잡아주어야한다.
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로 받아들인 데이터를
저장하기 위한 어느정도의 공간이 할당되어야한다.
메모리를 잡아주어야한다.
'예전것 > 프로그래밍' 카테고리의 다른 글
매개 변수 2을(를) 'const char [29]'에서 'LPCWSTR'(으)로 변환할 수 없습니다. (0) | 2009.09.11 |
---|---|
배열과 포인터에 관한문제 (0) | 2009.06.25 |
포인터 세번째, 여러가지 포인터 비교 (0) | 2009.06.25 |
포인터와 함수. (0) | 2009.06.23 |
C포인터와 little, big endian (0) | 2009.06.19 |