web-dev-qa-db-ja.com

`strlwr 'への未定義の参照

私のコードはテキストコンプレッサーのようなもので、通常のテキストを読み取って数字に変換します。すべての単語には数字があります。 DevC++でコンパイルされますが、終了しませんが、Ubuntu13.10ではコンパイルされません。 Ubuntuのタイトル「 `strlwr 'への未定義の参照」のようなエラーが発生します。コードが少し長いため、ここに投稿できませんが、エラーの1つはここからです。

//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("yazi.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);

            while (!ispunct(textword[i]))
            i++;

            if (ispunct(textword[i]))

            {

                i = 0;

                while (textword[i] != '\0')
                i++;

                i--;

                while (ispunct(textword[i]))
                i--;

                i++;

                i=0;

                while (isalpha(textword[i]))
                i++;

                textword[i] = '\0';

            }

            addNode(textword);

        }

    }

.... //main continues
12
mrtgnccn

strlwr()は標準のC関数ではありません。おそらく、1つの実装によって提供されますが、使用する他のコンパイラは提供しません。

自分で簡単に実装できます。

#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;
}
21
P.P.