[완료]구조체 변수가 NULL인지 아닌지 검사방법

anaud2의 이미지

안녕하세요

간단한건줄 알고 해보다가 조금 이해가 되질 않아서 질문을 드립니다.

구조체를 선언하고 구조체의 값을 누군가 선언을 했는지 안했는지 알아보기 위해 검사를 하는부분을 만들려 하는데

sockaddr_in clnt_sock;
....
if(clnt_sock == 0)혹은 if(clnt_sock == NULL) 로 했는데 컴파일시 에러가 발생을 합니다.

그러고 보니 구조체내의 특정변수에 값이 0인지는 간단히 되는데 구조체 전체가 0인지는 간단하게 검사가 안되는거 같네요

내부에 변수를 전부 검사해서 if문을 만들면 될거 같은데 그러면 큰~구조체는 문제가 될거 같구 음..갑자기 고민이 됩니다.

klyx의 이미지

NULL은 널 포인터, 즉 포인터에 대한 값입니다.
sockaddr_in clnt_sock;
이건 포인터가 아니기 떄문에 NULL이 될수 없습니다.

netionics의 이미지

질문을 읽어보면 문법을 잘못 이해하고 있는 것 같습니다.

아마도 memset(&clnt_sock, 0, sizeof(clnt_sock));
혹은 bzero(&clnt_sock, sizeof(clnt_sock));
이렇게 해놓았는지 아닌지 알아보려고 하시는 것 같은데
만약 그렇다면 이걸 확인하는 것 자체가 고약한 방법입니다.

굳이 하고 싶다면 따로 함수를 하나 만들어야합니다.

int iszero(void * s, size_t n)
{
	unsigned char *p = s;
	while (n--)
		if (p[n] != 0)
			return 0;
	return 1;
}

검사할 때는
if (iszero(&clnt_sock, sizeof(clnt_sock))

하시면 됩니다.

:)

hansolo의 이미지

구조체 멤버변수로

int used = FALSE;

같은걸 하나 추가하시고, 누군가 구조체에 값을 집어넣었다면 TRUE 로 바꾸도록 하면 되지 않겠습니까.

사이즈에 상관없이 구조체가 쓰였는지 아닌지 간단하게 검사 가능하겠지요.

추가) 글을 다시 읽어보니, 구조체를 고치지 못하는 상황인것도 같네요.;;

kane의 이미지

sockaddr_in <span>*</span>clnt_sock = 0;
....
if(clnt_sock == 0)

?

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.