You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 08:00:28