提问人:mrtgnccn 提问时间:5/13/2014 最后编辑:mrtgnccn 更新时间:4/10/2021 访问量:29531
对“strlwr”的未定义引用
undefined reference to `strlwr'
问:
我的代码就像一个文本压缩器,读取普通文本并变成数字,每个单词都有一个数字。它在 DevC++ 中编译,但不会结束,但是,它不会在 Ubuntu 13.10 中编译。我收到一个错误,就像 Ubuntu 中的标题“undefined reference to 'strlwr'”一样,我的代码有点长,所以我无法在这里发布它,但其中一个错误来自这里:
//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
答:
32赞
P.P
5/13/2014
#1
strlwr()
不是标准的 C 函数。它可能由一个实现提供,而您使用的另一个编译器则没有。
您可以自己轻松实现它:
#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;
}
评论
1赞
Jonathan Leffler
5/13/2014
以防万一,您应该使用 .char
str[i] = tolower((unsigned char)str[i]);
0赞
mrtgnccn
5/13/2014
@BlueMoon谢谢你,先生,我按照你说的做了,它变得活了过来。但是,我将 strcmp() 视为一个标准的 C 函数,这就是我使用它的原因。再次感谢你。
0赞
P.P
5/13/2014
strcmp() 是标准函数,而 strlwr() 不是。strlwr() 的文档会提到它(我希望!
0赞
Jonathan Leffler
5/13/2014
@BlueMoon:仅供参考:在 Linux 上(特别是 Ubuntu 14.04,特别是 GCC 4.8.2,但我认为它通常适用于 x86 和 x86_64 版本的 Linux),plain 是有符号类型;范围是 。Mac OS X 10.9.2 Mavericks 和 GCC 4.9.0 也是如此。char
CHAR_MIN == -128 && CHAR_MAX == +127
1赞
Rajat Thakur
4/10/2021
#2
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* strlwr(char* );
int main()
{
printf("Please Enter Size Of The String: \n");
int a,b;
scanf("%d",&a);
char* str;
str=(char*)malloc(sizeof(char)*a);
scanf("\n%[^\n]",str);
char* x;
x=strlwr(str);
for(b=0;x[b]!='\0';b++)
{
printf("%c",x[b]);
}
free(str);
return 0;
}
char* strlwr(char* x)
{
int b;
for(b=0;x[b]!='\0';b++)
{
if(x[b]>='A'&&x[b]<='Z')
{
x[b]=x[b]-'A'+'a';
}
}
return x;
}
下一个:多重定义...链接器错误
评论
scanf()
%s
%[...]
while (!feof(fp))