DaniWeb IT Discussion Community

DaniWeb IT Discussion Community (http://www.daniweb.com/forums/index.php)
-   C (http://www.daniweb.com/forums/forum118.html)
-   -   Warning: Comparison between pointer and integer (mingw 5.1.4) (http://www.daniweb.com/forums/thread160374.html)

java_girl Dec 2nd, 2008 2:20 am
Warning: Comparison between pointer and integer (mingw 5.1.4)
 
Hi.

This is NOT a homework assignment (self-interest only).

The exercise asks me to write a function which accepts two strings and returns a pointer to the longer of the two.

[code language="C"]
#include <stdio.h>
#include <stdlib.h>

char* longer( char str1[], char str2[] );
char* str_ptr;

int main( void ) {

char str1[] = "I like cheese but I dislike brussel sprouts!";
char str2[] = "I like cheese and pasta!";

str_ptr = longer( str1, str2 );

printf( "The longer string is: %s\n", str_ptr );

return 0;
}

char* longer( char str1[], char str2[] ) {

int i = 0, count1 = 0, count2 = 0;

while( str1[i] != NULL ) {
i++;
count1++;
}

while( str2[i] != NULL ) {
i++;
count2++;
}

if( count1 < count2 )
return str2;
else if ( count1 > count2 )
return str1;
else
puts( "The strings are of equal length!" );
}
[/code]

The compiler returns the following warnings:

ex106.c: In function `longer':
ex106.c:23: warning: comparison between pointer and integer
ex106.c:28: warning: comparison between pointer and integer

I'm unsure of how exactly to resolve the problems but am I correct in assuming it is a result of using an index on the str1 and str2 arrays?

Thanks,

java_girl

Luckychap Dec 2nd, 2008 3:10 am
Re: Warning: Comparison between pointer and integer (mingw 5.1.4)
 
there is a simple function to calculate a string length strlen(str) defined in string.h where str is the pointer to string of which you want to calculate the length.

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

char* longer( char str1[], char str2[] );
char* str_ptr;

int main( void ) {

char str1[] = "I like cheese but I dislike brussel sprouts!";
char str2[] = "I like cheese and pasta!";

str_ptr = longer( str1, str2 );

printf( "The longer string is: %s\n", str_ptr );

return 0;
}

char* longer( char str1[], char str2[] ) {

  int i = 0, count1 = 0, count2 = 0;

  count1 = strlen(str1);
  count2 = strlen(str2)


  if( count1 == count2 ) {
    puts( "The strings are of equal length!" );
    return "";
  } else {
    if ( count1 > count2 ) {
        return str1;
    } else {
          return str2;
    }
  }
}

And if you want to calculate the length manually then in while-loop
put this condition:

int count = 0;
while(str1[count] != '\0')
      count++
printf("\nLength of str1 = %d", count);

ArkM Dec 2nd, 2008 6:04 am
Re: Warning: Comparison between pointer and integer (mingw 5.1.4)
 
Wrong using of a POINTER constant defined as NULL macros in C:
while( str1[i] != NULL) /* wrong */
/* Right code: */
while (str1[i]) /* (I prefer this form); or */
while (str[i] != '\0') /* or */
while (str[i] != 0)
The C compiler can define NULL as
(void*)0
or simple 0. In the 1st case you are trying to compare char promoted to int with a pointer to void.
Moral: NULL is not a zero alias in C, use NULL only for pointer values.

devnar Dec 2nd, 2008 6:52 am
Re: Warning: Comparison between pointer and integer (mingw 5.1.4)
 
Correct way of using code tags:

[code=c]
.
.
Your code here
.
.
[/code]

Luckychap Dec 2nd, 2008 7:59 am
Re: Warning: Comparison between pointer and integer (mingw 5.1.4)
 
rather:

[code='c']

devnar Dec 2nd, 2008 11:17 pm
Re: Warning: Comparison between pointer and integer (mingw 5.1.4)
 
Posts can be edited for upto 15 minutes after they are created(someone correct me if I'm wrong). After that you'll just have to start a new post.


All times are GMT -4. The time now is 2:26 am.

Forum system based on vBulletin Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
©2003 - 2009 DaniWeb® LLC