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.

#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!" );
}

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

Recommended Answers

All 5 Replies

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);

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.

Correct way of using code tags:

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

[/code]

rather:

[code='c']

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.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.