undefined reference to `strlwr'

24,883

strlwr() is not standard C function. Probably it's provided by one implementation while the other compiler you use don't.

You can easily implement it yourself:

#include <string.h>
#include<ctype.h>

char *strlwr(char *str)
{
  unsigned char *p = (unsigned char *)str;

  while (*p) {
     *p = tolower((unsigned char)*p);
      p++;
  }

  return str;
}
Share:
24,883
mrtgnccn
Author by

mrtgnccn

Updated on April 10, 2021

Comments

  • mrtgnccn
    mrtgnccn about 3 years

    My code is like a text compressor, reading normal text and turns into numbers, every word has a number. It compiles in DevC++ but does not end, however, it does not compile in Ubuntu 13.10. I'm getting an error like in the title in Ubuntu "undefined reference to `strlwr'", my code is a little long so I am not able to post it here, but one of the error is from here:

    //operatinal funcitons here
    
    
    int main()
    {
    
        int i = 0, select;
    
        char filename[50], textword[40], find[20], insert[20], delete[20];
    
        FILE *fp, *fp2, *fp3;
    
        printf("Enter the file name: ");
    
        fflush(stdout);
    
        scanf("%s", filename);
    
        fp = fopen(filename, "r");
    
        fp2 = fopen("text.txt", "w+");
    
        while (fp == NULL)
        {
    
            printf("Wrong file name, please enter file name again: ");
    
            fflush(stdout);
    
            scanf("%s", filename);
    
            fp = fopen(filename, "r");
    
        }
    
        while (!feof(fp))
    
        {
    
             while(fscanf(fp, "%s", textword) == 1)
    
            {
    
                strlwr(textword);
    
                //some other logic
    
            }
    
        }
    
    .... //main continues
    
  • Jonathan Leffler
    Jonathan Leffler about 10 years
    Just in case char is signed, you should use str[i] = tolower((unsigned char)str[i]);.
  • mrtgnccn
    mrtgnccn about 10 years
    @BlueMoon Thank you sir, I did it like you said and it became alive. However I saw strcmp() as a standart C function and that is why I used it. Thank you again.
  • P.P
    P.P about 10 years
    strcmp() is a standard function, while strlwr() isn't. The documentation of strlwr() would have mentioned about it (I hope!).
  • Jonathan Leffler
    Jonathan Leffler about 10 years
    @BlueMoon: FYI: on Linux (Ubuntu 14.04 specifically, with GCC 4.8.2 specifically, but I think it is valid for x86 and x86_64 versions of Linux generically), plain char is a signed type; the range is CHAR_MIN == -128 && CHAR_MAX == +127. Ditto for Mac OS X 10.9.2 Mavericks and GCC 4.9.0.