null값의 의미에 대해서 ...

min2to의 이미지

C언어 에서 null값의 정확한 계념은 뭔가여?...

쓰레기값.. 0 값 이라고 알고 있는데

쓰이는 방식에 따라 변하는거 같아서여(초보초보)

예를들어

#include <stdlib.h>
#include <stdio.h>

main()
{

 float f1,f2;
 FILE *fp;

if ( (fp= fopen("input.txt", "r")) = NULL)
{
 fprintf(stderr, "Error opening file");
 exit(1);
}
 
 fscanf(fp, "%f %f", &f1, &f2);
 printf ("the %f, %f ,f1,f2);

fclose(fp);
return(0); 
}

이런 예제가 있는데 저위에 NULL선언이 무슨뜻인지 모르겟어서여
파일의 값이 0이면 에러문을 보여주는건지.. (아님 빈파일 일때에 보여주는건지)

vacancy의 이미지

NULL은 (void *)0이라고 보시면 되고요.
아무 곳도 가리키지 않는 포인터를 의미합니다.
( 실제론 메모리 0번지를 가리키긴 하지만 -_-; )

위의 사항은 man fopen 하시면 된다는.

Kroisse의 이미지

(fp= fopen("input.txt", "r")) = NULL

fopen함수는 파일 열기에 성공하면 파일 포인터를, 실패하면 NULL을 반납하지요. 그래서

if ( (fp= fopen("input.txt", "r")) = NULL)
{
 fprintf(stderr, "Error opening file");
 exit(1);
}

만약 파일 열기에 실패하면 에러 메시지를 내고 종료하도록 해 놓은 거에요.

only2sea의 이미지

추가로... 초보 분들이 많이 실수하시는 건데 저 위의 코드에서 = NULL이 아니고 ==NULL로 해야 합니다. =는 assignment고 ==는 equality가 되죠.

JuEUS-U의 이미지

컴파일러 간의 차이 때문이거나
코드의 흐름 상 명확한 표현을 위하여 쓰곤 하는데

혼자짠다면 그냥 막 써도 됩니다. :lol:

min2to의 이미지

Kroisse wrote:
(fp= fopen("input.txt", "r")) = NULL

fopen함수는 파일 열기에 성공하면 파일 포인터를, 실패하면 NULL을 반납하지요. 그래서

if ( (fp= fopen("input.txt", "r")) = NULL)
{
 fprintf(stderr, "Error opening file");
 exit(1);
}

만약 파일 열기에 실패하면 에러 메시지를 내고 종료하도록 해 놓은 거에요.

3번정도 읽어봤는데여 (머리가 나쁜거 같음 완전히)
근데 굳이 NULL 값을 넣어주는지 모르겟네여..
프로그램 짤때 무조건 성공되게 짤텐데 바보아닌 이상..
(제 생각 ..초보초보)

왜 넣어주는 지.. 그걸 알고 싶어여

모르는건 물어보라구 엄마 아빠가 알려주셧습니다
고수님,선배님들 도와주십쇼 독학하는 학생입니다

goguma의 이미지

지금은 레포트이신지 모르겠지만..
나중에 취직을 하셔서 개발쪽에 일하시게 된다면..
레포트가 아닌 일반 사용자들이 사용하는 프로그램을 개발하시지 않을까요?
미리 부터 예외처리 습관을 가지시는건 좋다고 생각합니다..^^
--------------------------------
스물셋.. 독립.. 열심히 살아보자!!
--------------------------------

--------------------------------
스물셋.. 독립.. 열심히 살아보자!!
--------------------------------

익명 사용자의 이미지

열기가 실패하는 이유는 여럿있지만 가장 흔한걸로는

1. 파일이 없는 경우

2. 파일이 있지만 권한이 없어서 열지 못하는 경우

3. 기타 다른 이유로 열수 없는 경우

등이 있지요.

min2to의 이미지

Anonymous wrote:
열기가 실패하는 이유는 여럿있지만 가장 흔한걸로는

1. 파일이 없는 경우

2. 파일이 있지만 권한이 없어서 열지 못하는 경우

3. 기타 다른 이유로 열수 없는 경우

등이 있지요.

저 죄송한데여
제가 (초보)라 그런데
그럼 원칙적으러 써줘야 정석인가여?
확실하다 싶으면 않써줘도 아무탈은 않나져?
(쓰기가 번거롭게 느껴져서여 저의 눈 엔.....)

모르는건 물어보라구 엄마 아빠가 알려주셧습니다
고수님,선배님들 도와주십쇼 독학하는 학생입니다

익명 사용자의 이미지

파일이 있다는 확/실/한 보장이 있다면

안써도 되겠죠.

그런데 그렇게 보장할 수 있는 경우가 정말 몇 안됩니다.

그런 의미에서 저런 에러 처리는 매우 중요하죠.

프로그램이 어떤데서는 되고 어떤데서는 안되는

이런 되먹지 않은걸 만드시고 싶으신건 아니겠지요?

min2to의 이미지

Anonymous wrote:
파일이 있다는 확/실/한 보장이 있다면

안써도 되겠죠.

그런데 그렇게 보장할 수 있는 경우가 정말 몇 안됩니다.

그런 의미에서 저런 에러 처리는 매우 중요하죠.

프로그램이 어떤데서는 되고 어떤데서는 안되는

이런 되먹지 않은걸 만드시고 싶으신건 아니겠지요?

그렇군여 .. 제가 내공이 부족하다 보니 눈에 보이는것만 보았네여

좋은 휴일 보내세여~

모르는건 물어보라구 엄마 아빠가 알려주셧습니다
고수님,선배님들 도와주십쇼 독학하는 학생입니다

익명 사용자의 이미지

대입 해주는걸까여?..
0값이라? 그런건가...

pool007의 이미지

Anonymous wrote:
대입 해주는걸까여?..
0값이라? 그런건가...

위 중간에도 써있지만,
대입이 아니라 "== NULL" 의 오타입니다.
대입 아닙니다.... 비교입니다.

--
Passion is like genius; a miracle.

pool007의 이미지

min2to wrote:
Anonymous wrote:
열기가 실패하는 이유는 여럿있지만 가장 흔한걸로는

1. 파일이 없는 경우

2. 파일이 있지만 권한이 없어서 열지 못하는 경우

3. 기타 다른 이유로 열수 없는 경우

등이 있지요.

저 죄송한데여
제가 (초보)라 그런데
그럼 원칙적으러 써줘야 정석인가여?
확실하다 싶으면 않써줘도 아무탈은 않나져?
(쓰기가 번거롭게 느껴져서여 저의 눈 엔.....)

세상엔 변태스러운 user들이 많습니다. ㅎㅎ
어떻게 하면 고장낼까를 고민하는...

--
Passion is like genius; a miracle.

ssif의 이미지

pool007 wrote:
min2to wrote:
Anonymous wrote:
열기가 실패하는 이유는 여럿있지만 가장 흔한걸로는

1. 파일이 없는 경우

2. 파일이 있지만 권한이 없어서 열지 못하는 경우

3. 기타 다른 이유로 열수 없는 경우

등이 있지요.

저 죄송한데여
제가 (초보)라 그런데
그럼 원칙적으러 써줘야 정석인가여?
확실하다 싶으면 않써줘도 아무탈은 않나져?
(쓰기가 번거롭게 느껴져서여 저의 눈 엔.....)

세상엔 변태스러운 user들이 많습니다. ㅎㅎ
어떻게 하면 고장낼까를 고민하는...

뜨끔.... :oops:

봄들판에서다

cinsk의 이미지

C FAQ Null pointers에 대해 한 번 읽어보기 바랍니다.

kmhh0021의 이미지

min2to wrote:
저 죄송한데여
제가 (초보)라 그런데
그럼 원칙적으러 써줘야 정석인가여?
확실하다 싶으면 않써줘도 아무탈은 않나져?
(쓰기가 번거롭게 느껴져서여 저의 눈 엔.....)

테스트 코드 정도를 짠다면... 확실히 파일이 존재 할거고.

만약 파일 없어 코어 나면 소스 대충 보고 파일이 있는지 확인해 보고는 다시 수정하거나 파일을 만들면 되지만.

제대로된 프로그램을 짠다고 하면 당연히 넣어야지요.

항상 만약의 경우를 생각해서 발생 할 수 있을것 같은 모든 에러에 대한 대비를 해 놓으셔야 합니다.


-------------------------------------------
피바다=피받아
http://blood.egloos.com
[一笑一少 一怒一老]
[笑門萬福來]

alwaysN00b의 이미지

if(fp= fopen("input.txt", "r")) = NULL )

아무래도 저만 눈치 챈것 같습니다. :)

딴지 아닙니다.

언제나 시작

ixevexi의 이미지

only2sea님이 지적하신걸 말씀하시나요? 8)

C++, 그리고 C++....
죽어도 C++

only2sea의 이미지

아래 코드 오히려 여는 괄호 하나가 부족한데요. 첨에 있던 코드는 괄호 개수는 맞는군요. 8)

alwaysN00b wrote:
if(fp= fopen("input.txt", "r")) = NULL )

아무래도 저만 눈치 챈것 같습니다. :)

딴지 아닙니다.

익명 사용자의 이미지

흠 일단 될수 있으면 보기 쉬운 코드로 짜시는게 좋습니다.

fp = fopen();
 
if( NULL == fp )
{
에러처리
}

그리고 상수롤 앞에 하시는게 컴파일시 오류가 떠서 편합니다.

NULL체크를 하는 이유는 오류처리 또는 예외처리입니다.

c++, java, C# 같은경우는 try catch로 해결할수 있지만 c 같은 경우는 저렇게 일일히 확인을 해서 처리
를 많이 합니다.

될수 있으면 코드는 간소하게 짜시는게 좋습니다.

그럼

매그넘의 이미지

상수를 앞에 쓰는게 컴파일시 오류가 뜬다는게..

어떤 의미인지..구체적인 설명을 부탁드려도 될까요?..

제 습관은..

변수 == 상수 ..

거의 이렇게 체크하고 있는데, 문제가 있으면..컴파일러에서 오류를 뱉어내기는 하거든요..

익명 사용자의 이미지

변수 == 상수
상수 == 변수
일단은 동일한 기능을 하는데 잘못해서 == 를 = 로 썻을때 컴파일시 오류..

댓글 달기

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