消除警告
/*寻找三个字符串的最长前缀,如没有返回空字符""
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)
{
inta, b, c, min;
void *ptr;
char s1, s2, s3;
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;
int i = 0;
for(i = 0; i < min; i++)
{
if((s1 == s2) && (s2 == s3))
{
s = s1;
}
else
{
break;
}
}
s = '\0';
if(s == '\0')
{
return "";
}
else
{
return s;
}
}
程序能运行,结果也正确,但是会出现警告: function returns address of local variable
怎么消除呢?
本帖最后由 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;
int main(void)
{
inta, b, c, min;
void* ptr;
char s1, s2, s3;
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;
int i = 0;
for (i = 0; i < min; i++)
{
if ((s1 == s2) && (s2 == s3))
{
s = s1;
}
else
{
break;
}
}
s = '\0';
if (s == '\0')
{
return '\0';
}
else
{
return s;
}
}
把s的声明放到主函数里边
search改为无返回值,向search传入s
/*
寻找三个字符串的最长前缀,如没有返回空字符""
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 *s);
int main(void)
{
inta, b, c, min;
void *ptr;
char s1, s2, s3, s;
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;
int i = 0;
for(i = 0; i < min; i++)
{
if((s1 == s2) && (s2 == s3))
{
s = s1;
}
else
{
break;
}
}
s = '\0';
if(s == '\0')
{
return "";
}
else
{
return s;
}
}
livcui 发表于 2020-7-30 10:39
你这里 return s 的 s 是数组地址,而这个数组会在函数结束时被销毁,所以返回了一个被销毁内存的地址,没 ...
对的,不过没有公共前缀会返回NULL,58行改成return “”就好了{:10_256:} 巴巴鲁 发表于 2020-7-30 11:30
对的,不过没有公共前缀会返回NULL,58行改成return “”就好了
我用的C++,会报错,所以才改了
设置个最佳吧{:10_254:} Unicorn# 发表于 2020-7-30 10:48
把s的声明放到主函数里边
search改为无返回值,向search传入s
感谢感谢,让我又知道了无返回值函数
页:
[1]