从c中的函数返回指针

时间:2017-05-24 08:07:59

标签: c pointers

  

写入获取字符串s和char c的函数,用于检查char是否显示在s中,如果是,则返回指向c显示的第一个位置的指针在s

这是我的代码。我不知道我做了什么“返回指针”,这是正确的吗?:

#include <stdio.h>
char *foo(char s[], char c)
{
    int i;
    char *ptr;
    for(i=0;s[i];i++)
    {
        if(s[i]==c)
        {
            printf("result: %d",i);
            *ptr=i;
            return ptr;
        }
    }
}
void main()
{
    char s[]="Error404";// some string
    char c='r';// some char
    foo(s,c);
}

2 个答案:

答案 0 :(得分:4)

首先,您的规格尚不清楚。在开始编码之前,请确保规范有意义。它没有说明如果你没有找到该角色该怎么办,所以在你知道之前你不能写这个函数。

即使未找到角色,您的功能也必须始终返回。实现这一点的常用方法是在这种情况下返回空指针。

你的指针应该指向找到的字符,而不是i这是一个整数,这是没有任何意义的。

将代码更正为:

char* foo (char s[], char c)
{
    char *ptr = NULL;

    for(int i=0; s[i]!='\0'; i++)
    {
        if(s[i]==c)
        {
            ptr = &s[i]; // point at the address of item number i in s
            break;
        }
    }

    return ptr; // will return NULL if not found, otherwise a pointer to the found item
}

答案 1 :(得分:1)

如果s是字符串,则s[i]表示字符串中的第i个字符,而s + i表示字符串中第i个字符的指针。所以你想要返回s + i。如果找不到char,您可能还想返回NULL

#include <stdio.h>

char *foo(char s[], char c)
{
    int i;

    for(i = 0; s[i]; i++)
    {
        if(s[i] == c)
            return (s + i);
    }
    return (NULL);
}