c - Printing an array of characters with "while" -
so here working version:
#include <stdio.h> int main(int argc, char const *argv[]) { char mytext[] = "hello world\n"; int counter = 0; while(mytext[counter]) { printf("%c", mytext[counter]); counter++; } }
and in action:
korays-macbook-pro:~ koraytugay$ gcc koray.c korays-macbook-pro:~ koraytugay$ ./a.out hello world
my question is, why code working? when (or how)
while(mytext[counter])
evaluate false?
these 2 work well:
while(mytext[counter] != '\0') while(mytext[counter] != 0)
this 1 prints garbage in console:
while(mytext[counter] != eof)
and not compile:
while(mytext[counter] != null)
i can see why '\0'
works, c puts character @ end of array in compile time. why not null
work? how 0 == '\0'
?
as last question,
but why not null work?
usually, null
pointer type. here, mytext[counter]
value of type char
. per conditions using ==
operator, c11
standard, chapter 6.5.9,
one of following shall hold:
- both operands have arithmetic type;
- both operands pointers qualified or unqualified versions of compatible types;
- one operand pointer object type , other pointer qualified or unqualified version of void; or
- one operand pointer , other null pointer constant.
so, tells, can only compare pointer type null pointer constant ## (null
).
after that,
when (or how)
while(mytext[counter])
evaluate false?
easy, when mytext[counter]
has got value of 0
.
to elaborate, after initialization, mytext
holds character values used initialize it, "null" @ last. "null" way c identifies string endpoint. now, null, represented values of 0
. so, can say. when end-of-string reached, while()
false.
additional explanation:
while(mytext[counter] != '\0')
works, because'\0'
representation of "null" used string terminator.while(mytext[counter] != 0)
works, because0
decimal value of'\0'
.
above both statements equivalent of while(mytext[counter])
.
while(mytext[counter] != eof)
not work because null noteof
.
reference: (#)
reference: c11
standard, chapter 6.3.2.3, pointers, paragraph 3
an integer constant expression value
0
, or such expression cast typevoid *
, called null pointer constant.
and, chapter, 7.19,
null
expands implementation-defined null pointer constant
note: in end, this question , realted answers clear confusion, should have any.
Comments
Post a Comment