我的任务是编写一个C程序,接收输入的两个字符串(我可以在decleration期间决定它们的内容),并返回第三个字符串,即前两个字符串的连接。
此外,我还需要将第三个字符串的每个元音替换为星号"*"。
我遇到的主要困难是如何从一个接收两个字符串的函数中返回一个字符串。如果能纠正我的错误代码,我将不胜感激:)
下面是代码:
#include <stdio.h>
#include <string.h>
const char* concatvow (char *str1, char *str2);
int main()
{
char word1[20]="One plus one ";
char word2[20]="eqauls two";
char *word3[20];
concatvow(word1, word2);
printf("%s", *word3);
return 0;
}
const char* concatvow (char *str1, char *str2){
char strfinal[20];
int i=0;
strcat(str1, str2);
strcpy(strfinal, str1);
if(strfinal[i]==65 || strfinal[i]==69 || strfinal[i]==73 || strfinal[i]==79 || strfinal[i]==85) {
strfinal[i]='*';
}
return strfinal;
}
这是我的代码的输出。
main.c: In function ‘concatvow’:
main.c:33:8: warning: function returns address of local variable [-Wreturn-local-addr]
33 | return strfinal;
| ^~~~~~~~
...Program finished with exit code 0
Press ENTER to exit console.
2条答案
按热度按时间qjp7pelc1#
C语言中的任何变量都只能保存在一定范围内的内存中。正如前面的答案所述,您返回的内存不再属于该变量。您可以将堆内存与malloc一起使用。
6tr1vspr2#
警告原因:
变量
strfinal
是concatvow()
函数的局部非静态变量,一旦从concatvow()
函数返回,该变量将停止存在。在其生存期之外对其进行任何访问都会导致未定义的行为。代码中的一些其他问题:
1.检查
concatvow()
函数的此语句-str1
没有足够的空间来保存连接后的结果字符串,则会导致未定义的行为。str1
有足够的空间,也会导致修改str1
。这是故意的吗?concatvow()
函数而不是数组,则它将尝试修改字符串常量,这是不推荐的做法。1.用
'*'
字符替换元音时,检查是否缺少小写元音。处理所有这些情况:
输出: