使用函数[复制]在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 中使构建失败? [复制]