Comparison between pointer and integer in C
Solution 1
NULL
is a pointer and str[i]
is the i-th char of the str array. char is and integer type, and as you compare them you get the warning.
I guess you want to check for end of string, that would you do with a check for the char with the value 0 (end of string), that is '\0'
.
BUT: this wont help you as you define it just as and array of chars and not as a string, and you didnt define the termininating 0 in the char array (you get just lucky that it is implicit there).
PS: Next time you should give at least the information where the compiler is complaining.
Solution 2
NULL should only be used in pointer contexts, but here you're comparing it to a character.
You'd normally want something like:
while (str[i] != '\0') {
[or, of course, something like puts(str);
or printf("%s", str);
]
Solution 3
You need to compare str[i]'s value with the terminating '\0' of a string, rather than NULL, which is considered a pointer. Your
while (str[i] != NULL ) {
changed to
while (str[i] != '\0') {
below:
int i = 0;
char str[50] = {'s', 'a', 'm', 'p','l','e'}; //only for test
while (str[i] != '\0') {
putchar(str[i]);
i++;
}
Solution 4
The biggest problem with that code is that, depending on your implementation, it might compile without error.
The problem, as others have said, is that NULL
is intended to represent a null pointer value, not a null character value. Use '\0'
to denote a null character. (Or you can use 0
, which is equivalent, but '\0'
expresses the intent more clearly.)
NULL
is a macro that expands to an implementation-defined null pointer constant. A null pointer constant can be either an integer constant expression with the value 0
, or such an expression cast to void*
. Which means that NULL
may be defined either as 0
or as ((void*)0)
(among other variations).
Apparently your implementation defines it as something like ((void*)0)
, which is why you got the warning message. (It could, and IMHO should, have been treated as a fatal error).
So never try to use NULL
other than as a null pointer constant -- and don't count on the compiler to warn you if you misuse it.
Solution 5
str[i]
is a character. NULL
is a pointer. You can't meaningfully compare those two data types (although they may or may not be implemented as the same size of integer internally). That's all the error message means.
Not that the comparison is not only type-incorrect, it also doesn't do what you probably mean. You seem to assume that a character array with an incomplete initializer would be automatically terminated with a \0 character, but that rule applies to string literals, not to character arrays you create yourself. As it is, you're invoking undefined behaviour.
Related videos on Youtube
user1313386
Updated on August 02, 2022Comments
-
user1313386 5 months
I have a bit stupid question about program in C. My compiler says me: warning: comparison between pointer and integer. I really don't know why. I only want to write each char on the screen.
My code:
int i = 0; char str[50] = {'s', 'a', 'm', 'p','l','e'}; //only for test while (str[i] != NULL) { putchar(str[i]); i++; }
Can you help me please? I didn't find any usefull answer on the internet.
-
Milee over 10 yearstry comparing with '\0' :) coz NULL ofcourse is a pointer.
-
-
Jesse Good over 10 yearsComparison with a string literal seems wrong (wouldn't
""
give its address?). -
Keith Thompson over 8 years@JesseGood: Comparison with a string literal is wrong; it's a constraint violation requiring a diagnostic. Santhosh: You should compile your code before posting it.