使用函数[复制]在C中使单词小写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用函数[复制]在C中使单词小写相关的知识,希望对你有一定的参考价值。

我不确定问题是什么。该函数似乎运行良好,但在主函数中,当使用printf进行测试时,它不会显示结果。

char* MotMiniscule(char* mot)
{
char motm[100],c,*motf;
int i=0;
strcpy(motm,mot);
c=motm[i];
while(c!='')
{
    printf("%c 
",c);
    motm[i]=tolower(c);
    i++;
    c=motm[i];
}
strcpy(motf,motm);
printf("%s
",motf);
return(motf);
}

main()
{
char *mot="HEllooOoMA",*min;
min=MotMiniscule(mot);
printf("
 le mot est %s:
",mot);
printf("|| %s  ||",min);
}

答案

你从未在函数motf中为指针MotMiniscule分配空间:

strcpy(motf,motm);

这是未定义的行为,因为motf中的地址是不确定的。你应该给它一些空间来指出:

motf = malloc(100);

完整的代码应该是:

char* MotMiniscule(char* mot)
{
    char motm[100],c,*motf;
    int i=0;
    strcpy(motm,mot);
    c=motm[i];
    while(c!='')
    {
        printf("%c 
",c);
        motm[i]=tolower(c);
        i++;
        c=motm[i];
    }
    motf = malloc(100); // Allocate some memory
    strcpy(motf,motm);
    printf("%s
",motf);
    return(motf);
}

int main()
{
    char *mot="HEllooOoMA",*min;
    min=MotMiniscule(mot);
    printf("
 le mot est %s:
",mot);
    printf("|| %s  ||",min);
    free(min); // Don't forget to free dynamically allocated memory
}

正如John Bode所指出的那样,使用motm是完全多余的。你可以安全地删除它。此外,动态分配的大小应该依赖于mod的长度。所以这个代码的精炼版本就是这样。

char* MotMiniscule(char* mot)
{
    char c, *motf;
    int i = 0;
    c = mot[0];
    motf = malloc(strlen(mot) + 1); // Allocate some memory
    while (c != '')
    {
        printf("%c
", c);
        motf[i] = tolower(c);
        i++;
        c = mot[i];
    }
    // No need to copy again, but
    motf[i] = ''; // Remember to terminate it
    printf("%s
", motf);
    return(motf);
}

int main()
{
    char *mot = "HEllooOoMA", *min;
    min = MotMiniscule(mot);
    printf("
 le mot est %s:
", mot);
    printf("|| %s  ||", min);
    free(min); // Remember to free it
}

以上是关于使用函数[复制]在C中使单词小写的主要内容,如果未能解决你的问题,请参考以下文章

如果 .cshtml 文件中存在 razor/C# 错误,如何在 VS 2013 中使构建失败? [复制]

如何在二维列表中将单个单词小写? [复制]

在 Swift 中使用以函数为参数的 C 函数

JavaScript正则表达式匹配不区分大小写的单词? [复制]

无法在C中使用strcpy从指针数组复制字符串? [复制]

我如何在python中向后打印一个单词? [复制]