munja란 변수에 'a' 값을 넣고,
포인터 buf로 munja 변수를 가리키도록 한 후에,
포인터 buf 가리키는 곳의 값을 증가시켜서 'b'가 되도록 한 후,
그 값을 출력해 보려고 하신건 아닌지.. ^^;
뒤에 munja 변수를 'b'로 다시 대입하고 buf가 가리키게 한 것은 디버깅용으로.. (혼자 상상.. -.-;)
#include <stdio.h>
int main()
{
char munja;
char *buf;
munja='a';
buf=(char *)munja; // char형인 munja의 주소를 넣은게 아니면서 그 형을 (char *)로 정의를 해서 cast 연산으로 에러출력을 시키지 않습니다. 이 경우에는 어떻게 되는지 확실하지 않습니다. 다만 이론대로 해석을 하면 munja의 내용을 가지고 address화시키는 것인데 munja가 ascii로 'a'라는 97번 코드를 넣었기 때문에 97번인 메모리 adress를 buf가 가리키게 되는? 올바른 값을 얻기 위해서 buf=&munja로 하시는게 나을듯..
buf++;
munja='b';
buf=(char *)munja; // 이것두 위와 같음
printf("%s",buf); // buf가 string 형이기 때문에 출력하는데는 이상이 없습니다만 buf가 가리키는 곳의 주소가 위에처럼 98번의 절대 영역을 침범하게 되는데 그러면 kernel 상에서 그 주소를 processor가 가져갈 수 있느냐는? 그리고 원하는 것이 해킹인지 모르겠으나, 올바른 값을 얻기 위해서는 printf("%c",*buf);라구 하시는게 맞을듯..
return 0;
}
^^
초심으로
일단은 문자열 끝에 NULL이 없어서 에러가 나는 것일텐데..원하시는
일단은 문자열 끝에 NULL이 없어서 에러가 나는 것일텐데..
원하시는 결과가 뭔가요? ab를 출력하는 건가요?
----
Let's shut up and code.
Re: C 포인터 질문요
위의 코드를 다르게 쓰면
이 되겠죠? 따라서 buf=98이 됩니다. 윈도에서 98번지는 접근 금지 구역에 있으므로 printf("%s", buf)하면 세그폴트가 발생할 겁니다. 에러가 안나게 하려면
으로 하면 되지만, 이것도 역시 buf가 널로 끝나지 않기 때문에 b 다음에 쓰레기 문자들이 아무렇게나 나오게 됩니다.
Re: ^^
strcmp()는 문자열을 비교할 때 사용하는 함수입니다. 문자열 != 문자. 그리고 buf와 &buf[0]는 언제나 같습니다.
혹시..
munja란 변수에 'a' 값을 넣고,
포인터 buf로 munja 변수를 가리키도록 한 후에,
포인터 buf 가리키는 곳의 값을 증가시켜서 'b'가 되도록 한 후,
그 값을 출력해 보려고 하신건 아닌지.. ^^;
뒤에 munja 변수를 'b'로 다시 대입하고 buf가 가리키게 한 것은 디버깅용으로.. (혼자 상상.. -.-;)
맞다면 포인터를 다음과 같이 사용하시면 됩니다.
맨 페이지에 보면, printf 에서 specifier? %s는 NUL 문자열이 나올 때까지 출력을 하도록 되어 있다고 하는군요.. %c로 출력하시면 int형을 unsigned char 값으로 변환하여, 그에 해당하는 문자를 출력하게 됩니다..
그리고, 포인터 buf의 메모리 할당 없이
buf[1] = '\0';
위와 같이 지정해서 사용하는 것은 위험의 소지가 있지 않을까요??
[quote]포인터 buf 가리키는 곳의 값을 증가시켜서 'b'가 되도록
a다음에 b를 넣어서 정확하진 않지만, 제가 보기에는 포인터를 증가해서 거기에 b를 넣으려는 의도를 보이는데... -_-;
어쨌던 선언한땐 어드레스가 올거라고 하고, 접근이 금지된 주소를 넣은뒤,
접근하려 해서 생기는 거네여...
앞마당 먹고 시작한 저그의 8할은 뮤탈 테크를 먼저 탄다. 하지만 나머지 2할때문에 항상 스켄이 모자란다. - _-;
에러 리포트
댓글 달기