c 문법점 봐주시면 감사하겠습니다. 초간단.

mudori의 이미지

#include <stdio.h>

main() {

char aa[100]="\0";

if(aa == NULL) {
printf ("NULL");

}else {
printf("not null");
printf("ip is %s", aa);
}

}

계속 not null만 찍힙니다.
NULL도 찍고 싶은데 어떻게 비교를 해야 하나요?

익명 사용자의 이미지

array의 이름을 == 비교연산자 옆이나 = 대입(?) 연산의 오른쪽에서 사용하시면 array의 첫 요소의 주소가 튀어나오게 됩니다.

내용이야 어쨌든 array의 주소는 NULL이 아닌가 봅니다.

mudori의 이미지

어떻게 해야 널로 나올 수 있을까요

mudori의 이미지

if(aa == 0 ) {

이렇게 해도 안되네요.

maximus의 이미지

비교를 하실려고 하는게 그 주소에 대한 값이 아닌가요 ?
그러므로 aa==NULL 이 아니고 aa[0]==NULL, 또는 *aa==NULL 이라고 해야 올바른것 같습니다.

aa==NULL 이라고 하면 aa 의 주소가 널이 아니기 때문에..
결과는 당연한것 같습니다만.

=================================
:: how about a cup of tea ? ::
=================================

kall의 이미지

if ( aa[0] == NULL ) {로 바꾸시면 경고가 나지만 돌기는 돕니다. 원하시는 내용이 스트링의 존재유무라면

string.h를 포함해서
if ( strcmp(aa, "\0") == 0 ) {정도면 되지 않을지..

----
자신을 이길 수 있는자는
무슨짓이든 할수있다..
즉..무서운 넘이란 말이지 ^-_-^
나? 아직 멀었지 ㅠㅠ

mudori의 이미지

감사합니다. 해결할 수 있겠네요..

mudori의 이미지

아. 이 주소값에 아무것도 없다면 0 인가요 NULL 인가요?

krisna의 이미지

if (strlen(aa)) {
} else {
}

k2hyun의 이미지

if( aa[0] == '\0' ) {
} else {
}

이건 왜 없죠??

저는 맨 앞 한바이트만 널문자와 비교하는 식을 주로 쓰는데요. ^^;

더 이상 없다.

codebank의 이미지

k2hyun wrote:
if( aa[0] == '\0' ) {
} else {
}

이건 왜 없죠??

저는 맨 앞 한바이트만 널문자와 비교하는 식을 주로 쓰는데요. ^^;


kall님이 먼저 답변을 해주신 부분에 있죠. 경고가 나온다는...
어차피 aa가 array라면 krisna님의 strlen이 적절하지 않나 싶네요.
한가지...
대부분의 str... ()함수의 경우 길이가 지정되지 않는 함수에서 일어날 수 있는 에러가
있습니다. segment fault가 바로 그것인데 strcpy같은 함수에서 가끔 발생을
합니다. 이런 길이를 지정하지 않고 사용하는 함수들은 사용하실때 꼭 주의해서
사용하는게 좋습니다. 될 수 있으면 strncpy와같은 함수를 이용하는게 좋겠죠.
예전에 깜밖깜밖해서 자주 겪었던 문제라서... :)

------------------------------
좋은 하루 되세요.

k2hyun의 이미지

codebank wrote:
k2hyun wrote:
if( aa[0] == '\0' ) {
} else {
}

이건 왜 없죠??

저는 맨 앞 한바이트만 널문자와 비교하는 식을 주로 쓰는데요. ^^;


kall님이 먼저 답변을 해주신 부분에 있죠. 경고가 나온다는...
어차피 aa가 array라면 krisna님의 strlen이 적절하지 않나 싶네요.
한가지...
대부분의 str... ()함수의 경우 길이가 지정되지 않는 함수에서 일어날 수 있는 에러가
있습니다. segment fault가 바로 그것인데 strcpy같은 함수에서 가끔 발생을
합니다. 이런 길이를 지정하지 않고 사용하는 함수들은 사용하실때 꼭 주의해서
사용하는게 좋습니다. 될 수 있으면 strncpy와같은 함수를 이용하는게 좋겠죠.
예전에 깜밖깜밖해서 자주 겪었던 문제라서... :)

if ( aa[0] == NULL ) {

이것과

if ( aa[0] ==  '\0' ) {

는 다른데요. -Wall 로 컴파일해도 아무런 경고 없습니다.

NULL 은 포인터 타입이기 때문에 저렇게 비교하면 경고가 나오지요. :)

더 이상 없다.

etermory의 이미지

#include <stdio.h>
#include <string.h>

int main()
{
	char aa[100] = "\0";

	if ( strlen( aa ) == 0 )
		printf( "NULL\n" );
	else
	{
		printf( "not NULL " );
		printf( "ip is %s\n", aa );
	}

	return 0;
}

스트링의 존재 유무를 의도하셨다면 이것도 괜찮을 것 같네요.

그리고 printf 부분에 모두 \n이 없던데..

프로그램이 종료되기 전 \n이 한 번도 나오지 않으면 출력이 안되는 경우도 있습니다.

그리고 main 함수는 반환값을 int로 명시해주는 것이 좋지 않을까 싶구요..

flyingykk의 이미지

mudori wrote:
아. 이 주소값에 아무것도 없다면 0 인가요 NULL 인가요?

aa 자체가 aa 배열의 첫 번째 아이템(aa[0])의 주소를 가리키는 상수이기 때문에 aa 배열에 의미 있는 값이 들어있든 쓰레기 값이 들어있든 또는 100개의 '\0'이 들어있든 aa는 0이나 NULL 값을 가질 수 없습니다.
cdpark의 이미지

1. NULL은 주소에 대한 macro입니다. 포인터가 NULL인지 아닌지 검사하기 위해서 쓰일 수 있지만, 포인터가 가리키는 값과 비교하는 건 의미가 없습니다. (char 형이 아닙니다.)

2. 길이가 0인 문자열은 ""입니다. "\0"이 아니고요.

mudori의 이미지

정말 감사합니다. ..

댓글 달기

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