|
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() ,你自己改改吧
这样?
|