0

我编写了一个函数。它得到 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 从没有强制转换的指针生成整数 [默认启用]

4

4 回答 4

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;
}
于 2013-01-04T17:32:55.440 回答
1

传递 'mystrchr' 的参数 2 从指针生成整数而不进行强制转换

因此,您正在传递一个指针 ( "d"is 的类型,并且在传递给函数时char [2]它会衰减),但是该函数需要 a ,它是一个整数类型。char *char

修正:改变

mystrchr("asdfg", "d");

mystrchr("asdfg", 'd');

(注意周围的单引号'd'- 单引号表示 a char,而双引号表示字符串文字。)

于 2013-01-04T17:17:32.250 回答
0

你的函数是这样声明的

char *mystrchr(const char *from, char c)

并且旨在将非常量指针返回到 constfrom字符串的中间。您不得将 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文字。

于 2013-01-04T17:24:21.170 回答
0

您可以使用单引号作为第二个参数来消除一个警告。你通过"d"'d'引号传递。像这样 : mystrchr("asdfg", 'd');

"d"char*当您接受函数定义中的参数时是类型,char因此只有警告。

还将代码更改return (const *)from+i;return from+i;无需在此处进行类型转换。

因为achar*类型并且您正在返回const char *类型并分配const char*char*所以您收到不兼容的指针类型警告消息

于 2013-01-04T17:16:37.607 回答