我编写了一个函数。它输入1个字符串和1个字符。字符是起始点,它从此字符打印。但我的代码给出了2个错误。你能救我吗?
#include <stdio.h>
char * mystrchr(const char * from, char c)
{
int i;
for(i=0; from[i]!='\0'; i++)
if(from[i]==c)
return (const *)from+i;
return 0;
}
int main()
{
char *a;
a=mystrchr("asdfg","d" );
printf("%s", a);
return 0;
}
注意:其中一个警告不适合标题。因此,我在那里写道:
传递'mystrchr'的参数2从指针生成整数而没有强制转换[默认启用]
答案 0 :(得分:2)
#include <stdio.h>
char * mystrchr(const char * from, char c) {
int i;
for(i=0; from[i]!='\0'; i++)
if(from[i]==c)
return from+i;
return 0;
}
int main() {
char *a;
a=mystrchr("asdfg",'d' );
printf("%s", a);
return 0;
}
答案 1 :(得分:1)
传递'mystrchr'的参数2从指针中生成整数而没有强制转换
所以你传递一个指针("d"
的类型为char [2]
,当传递给函数时它会衰减到char *
),但函数需要一个char
,这是一个整体类型。
修正:更改
mystrchr("asdfg", "d");
到
mystrchr("asdfg", 'd');
(注意'd'
周围的单引号 - 单引号表示char
,而双引号表示字符串文字。)
答案 2 :(得分:0)
您可以使用第二个参数的单引号删除一个警告。
您在单引号中传递"d"
次传递'd'
。
像这样 :
mystrchr("asdfg", 'd');
"d"
是char*
类型,而您接受函数定义中的参数为char
仅因此警告。
同时将代码return (const *)from+i;
更改为return from+i;
,无需在此处进行类型转换。
因为a
是char*
类型,并且您正在返回const char *
类型并将const char*
分配给char*
所以您获得了不兼容的指针类型警告消息
答案 3 :(得分:0)
您的功能就像这样声明
char *mystrchr(const char *from, char c)
,旨在将非const指针返回到const from
字符串的中间。您不能将const数据转换为非const。所以你应该声明你的函数:
const char *mystrchr(const char *from, char c)
此时您可以在return
声明中删除演员。
return from+i;
如果使用迭代指针,该函数可以说更简单:
const char *mystrchr(const char *from, const char c)
{
for (const char *p = from; *p; p++)
if (*p == c)
return p;
return 0;
}
另一个问题是文字"d"
是以空字符结尾的C字符串文字,而不是char
。您需要使用'd'
来指定char
字面值。