黑马程序员技术交流社区
标题: 查找最大字符串的题,帮我看一下哪里有问题。谢谢 [打印本页]
作者: 兰闻天 时间: 2014-4-28 20:19
标题: 查找最大字符串的题,帮我看一下哪里有问题。谢谢
本帖最后由 兰闻天 于 2014-4-30 10:45 编辑
/*
5、 在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。(C语言)
*/
#import <stdio.h>
#import <string.h>
char * MaxChar(char *string)
{
char *result;
char str[50][50];
int j=0,k=0;
//计算字符串的长度
int length = strlen(string);
for (int i=0; i<=length; i++) {
if ( *(string+i)) {
if (' ' == *(string+i)) {
str[j][ i]='\0';
j++;k=0;
}else
{
str[j][k]=*(string+i);
k++;
}
}
else
{
str[j][k]='\0';
}
}
int u=0;
for (int m=1; m<=j; m++) {
if(strlen(str[ u]) < strlen(str[m]))
{
u=m;
}
}
return &str[ u];
}
int main()
{
//定义一个已知字符串
char *string="I am a people sjdfkas jkejwkfajkdshfk hfkajfhds";
//
char *result = MaxChar( string );
printf("%s\n",result);
return 0;
}
编译链接后两个警告
5-测试题5.c:38:12: warning: incompatible pointer types returning
'char (*)[50]' from a function with result type 'char *'
[-Wincompatible-pointer-types]
return &str;
^~~~~~~
5-测试题5.c:38:13: warning: address of stack memory associated with local
variable 'str' returned [-Wreturn-stack-address]
return &str;
^~~
2 warnings generated.
查看结果返回的不全:jkejwk
return &str [ u]; 变成
return str[ u];
测试题5.c:43:12: warning: address of stack memory associated with local
variable 'str' returned [-Wreturn-stack-address]
return str;
^~~
1 warning generated.
作者: dawn.dai 时间: 2014-4-28 21:03
本帖最后由 dawn.dai 于 2014-4-28 21:30 编辑
#import <stdio.h>
#import <string.h>
char * MaxChar(char *string)
{
char *result;
char str[50][50];
int j=0,k=0;
//计算字符串的长度
unsigned long length = strlen(string);//int范围太小
for (int i=0; i<=length; i++) {
if ( *(string+i)) {
if (' ' == *(string+i)) {
str[j]='\0';
j++;k=0;
}else
{
str[j][k]=*(string+i);
k++;
}
}
else
{
str[j][k]='\0';
}
}
//int u=0;
result =(char *)str;//我强转了一下,就没有警告了
for (int m=1; m<=j; m++) {
if(strlen(result) < strlen(str[m]))
{
result=str[m];
}
}
return result;
}
int main()
{
//定义一个已知字符串
char *string="I am a people sjdfkas jkejwkfajkdshfk hfkajfhds";
//
char *result = MaxChar( string );
printf("%s\n",result);
return 0;
}
作者: 兰闻天 时间: 2014-4-28 21:06
我找出来显示不全了,是str[50][50]太小了,但是两个警告是怎么回事啊
作者: dawn.dai 时间: 2014-4-28 21:31
为什么我运行可以全部显示
作者: 兰闻天 时间: 2014-4-28 21:32
。。。不知道
作者: 执着的土豆 时间: 2014-4-28 21:55
是类型不匹配的问题,str[u]已经是个地址了,你要再取它的地址(&str[u]),就成了数组指针类型了,即警告中所示的char (*)[50],而你的函数返回值类型是char *,所以就警告说类型不匹配。
作者: 兰闻天 时间: 2014-4-28 22:10
我这是有没有&都警告
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |