C언어 Memset함수에 관해서 .. 쉬운부분인데..

milk901의 이미지

Memset 함수는 첫번쨰 인자로 포인터형을 받고 2번쨰는 주소의 채울값과 3번쨰는 할당될 바이트수 인데..
위와 같이 했을 경우에는 arr에 memset이 적용되서 전부다 배열안의 값이 0으로 바뀌는데 왜 두번쨰 값을 0이 아닌 10으로 바꿀떄는
모든값이 10으로 초기화가 되는게 아니라 주소값이 나와버리나요 ㅇ_ㅇ ?..
그리고 왜 주소값이 4바이트씩 전부 다르게 나와야 하는데 전부다 같게 나오는 이유도 좀 알수있을까요 ..?

#include
#include

void main()
{
int i;
int arr[10];

memset(arr,0,sizeof(int)*10);


for(i=0;i<10;i++)
{
printf("%d ", arr[i]);
}


}

익명 사용자의 이미지

그게 왜 주소값이라고 생각하는지?

출력값을 이진수로 바꾸고 생각해보심..

milk901의 이미지

죄송한데.. 출력값을 이진수로 바꾸라는게 무슨말뜻인지좀 알려주실수 있나요 ..?
%d가 10진수고 %x가 16진수 %o가 8진수 인데 2진수는 찾아봐도 없는데..
비트연산을 말씀하시는건가요 ?

익명 사용자의 이미지

나오는 수를 직접 2진수로 변환하던지, 계산기 같은 프로그램으로 2진수로 바꾸어서 그 패턴을 살펴보라는 말씀이십니다.

그런데 %08x 로 16진수 표현을 살펴보는 정도로도 충분할 거 같습니다. 십진수 10은 16진수로 0x0a죠...

10말고 다른 수로 바꾸어서 살펴보시고, man memset 로 메뉴얼을 잘 읽어 보시고요.

익명 사용자의 이미지

aaaa

mirheekl의 이미지

http://www.cplusplus.com/reference/cstring/memset/

void * memset ( void * ptr, int value, size_t num );
Fill block of memory
Sets the first num bytes of the block of memory pointed by ptr to the specified value **(interpreted as an unsigned char).**

두번째 파라미터가 int라서 헷갈릴 여지가 있는데 (왜 이렇게 돼있는지는 모르겠습니다) 사실상 1바이트짜리 데이터라고 봐야 합니다.

결국 해당 메모리 영역을 지정받은 숫자(바이트)로 채우게 되는 겁니다. 따라서 10(=0x0a)을 넣고 나서 이걸 int단위로 찍으면 당연히 0x0a0a0a0a에 해당하는 int 숫자가 찍혀나오겠죠. 0으로 해도 똑같은 일이 일어나지만 단지 값이 0이라서 우연히 같은 결과가 나온 것 뿐.

int단위로 초기화를 하고 싶으시면, 적절한 배열 초기화를 사용하거나 for 루프를 돌면서 값을 채우시면 됩니다.

--

milk901의 이미지

감사합니다!!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.