为何C语言调用strlwr()函数报错?该函数是否属于C标准?
问题解答
为什么strlwr()会报错?
strlwr()不是C语言标准库中的函数,它是微软Visual C++等特定编译器提供的非标准扩展函数。你的代码用GCC编译时,因为标准C库没有这个函数的定义,所以会出现「隐式声明」警告和「未定义引用」的链接错误。
你的代码问题分析
你写的代码本身逻辑没问题(用char n[] = "NAME"定义的是可修改的字符数组,符合转小写操作的要求),但依赖了非标准函数导致编译失败。
替代方案:用标准C实现字符串转小写
可以借助标准库的tolower()函数(需要包含<ctype.h>),手动遍历字符串的每个字符完成转换:
#include <stdio.h> #include <ctype.h> #include <string.h> int main(){ char n[] = "NAME"; // 遍历字符串每个字符转小写 for(int i = 0; i < strlen(n); i++){ n[i] = tolower((unsigned char)n[i]); } printf("%s", n); return 0; }
或者自己实现一个类似strlwr的函数:
#include <stdio.h> #include <ctype.h> #include <string.h> char* my_strlwr(char* str){ if(str == NULL) return NULL; char* ptr = str; while(*ptr != '\0'){ *ptr = tolower((unsigned char)*ptr); ptr++; } return str; } int main(){ char n[] = "NAME"; my_strlwr(n); printf("%s", n); return 0; }
补充说明
如果是在Windows平台用VC编译,strlwr()是可以正常使用的,但为了代码的可移植性,建议优先使用标准C的方式实现字符串转小写。
内容的提问来源于stack exchange,提问作者Dash point
相关产品推荐
相关产品推荐

