簡體   English   中英

從c中的函數返回指針

[英]return pointer from a function in c

寫入函數獲取字符串s和char c ,該字符串檢查char是否在s顯示,如果是,則返回指向cs顯示的第一位的指針

這是我的代碼。 我不確定我對“返回指針”做了什么,這正確嗎?:

#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);
}

首先,您的規范尚不清楚。 在開始編碼之前,請確保該規范有意義。 它沒有說明如果找不到字符該怎么 ,因此您無法在知道之前編寫此函數。

即使未找到該字符,您的函數也必須始終返回某些內容。 一種常見的實現方法是在這種情況下返回空指針。

您的指針應該指向找到的字符,而不是指向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
}

如果s是字符串,則s[i]表示字符串中的第i個字符,而s + i表示指向字符串中的第i個字符的指針。 所以你想返回s + i 如果找不到字符,您可能還想返回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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM