|
10鱼币
/*
寻找三个字符串的最长前缀,如没有返回空字符""
eg:输入"flower", "flow","flight"
输出"fl"
输入"dog", "car", "mouse"
输出""
*/
#include <stdio.h>
#include <string.h>
#define MAX 1024
char *search(char *s1,char *s2, char *s3, int min);
int main(void)
{
int a, b, c, min;
void *ptr;
char s1[MAX], s2[MAX], s3[MAX];
printf("请输入s1字符串:");
gets(s1);
printf("请输入s2字符串:");
gets(s2);
printf("请输入s3字符串:");
gets(s3);
a = strlen(s1);
b = strlen(s2);
c = strlen(s3);
min = a < b ? a : b;
min = min < c ? min : c;
ptr = search(s1, s2, s3, min);
printf("%s",ptr);
return 0;
}
char *search(char *s1,char *s2, char *s3, int min)
{
char s[MAX];
int i = 0;
for(i = 0; i < min; i++)
{
if((s1[i] == s2[i]) && (s2[i] == s3[i]))
{
s[i] = s1[i];
}
else
{
break;
}
}
s[i] = '\0';
if(s[0] == '\0')
{
return "";
}
else
{
return s;
}
}
程序能运行,结果也正确,但是会出现警告:[Warning] function returns address of local variable [enabled by default]
怎么消除呢?
本帖最后由 livcui 于 2020-7-30 11:14 编辑
你这里 return s 的 s 是数组地址,而这个数组会在函数结束时被销毁,所以返回了一个被销毁内存的地址,没有意义,也就报警了,
C 我不熟,编译器也没有 gets() ,你自己改改吧
这样?
- /*
- 寻找三个字符串的最长前缀,如没有返回空字符""
- eg:输入"flower", "flow","flight"
- 输出"fl"
- 输入"dog", "car", "mouse"
- 输出""
- */
- #include <stdio.h>
- #include <string.h>
- #define MAX 1024
- char* search(char* s1, char* s2, char* s3, int min, char*);
- char s[MAX];
- int main(void)
- {
- int a, b, c, min;
- void* ptr;
- char s1[MAX], s2[MAX], s3[MAX];
- printf("请输入s1字符串:");
- gets(s1);
- printf("请输入s2字符串:");
- gets(s2);
- printf("请输入s3字符串:");
- gets(s3);
- a = strlen(s1);
- b = strlen(s2);
- c = strlen(s3);
- min = a < b ? a : b;
- min = min < c ? min : c;
- ptr = search(s1, s2, s3, min, s);
- printf("%s", ptr);
- return 0;
- }
- char* search(char* s1, char* s2, char* s3, int min, char* s)
- {
- //char s[MAX];
- int i = 0;
- for (i = 0; i < min; i++)
- {
- if ((s1[i] == s2[i]) && (s2[i] == s3[i]))
- {
- s[i] = s1[i];
- }
- else
- {
- break;
- }
- }
- s[i] = '\0';
- if (s[0] == '\0')
- {
- return '\0';
- }
- else
- {
- return s;
- }
- }
复制代码
|
最佳答案
查看完整内容
你这里 return s 的 s 是数组地址,而这个数组会在函数结束时被销毁,所以返回了一个被销毁内存的地址,没有意义,也就报警了,
C 我不熟,编译器也没有 gets() ,你自己改改吧
这样?
|