返回c中函数的指针
写入函数,获取字符串返回c中函数的指针,c,pointers,C,Pointers,写入函数,获取字符串s和字符c,检查字符是否显示在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:
s
和字符c
,检查字符是否显示在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);
}
#包括
char*foo(char s[],char c)
{
int i;
char*ptr;
对于(i=0;s[i];i++)
{
如果(s[i]==c)
{
printf(“结果:%d”,i);
*ptr=i;
返回ptr;
}
}
}
void main()
{
char s[]=“Error404”;//一些字符串
char c='r';//一些char
傅(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
}
首先,您的规格不清楚。在开始编码之前,请确保规范是合理的。它没有说明如果找不到字符该怎么办,因此在知道之前不能编写此函数 函数必须始终返回某些内容,即使找不到字符。实现这一点的常用方法是在这种情况下返回空指针 指针应该指向找到的字符,而不是
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);
}
#包括
char*foo(char s[],char c)
{
int i;
对于(i=0;s[i];i++)
{
如果(s[i]==c)
返回(s+i);
}
返回(空);
}
如果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);
}
#包括
char*foo(char s[],char c)
{
int i;
对于(i=0;s[i];i++)
{
如果(s[i]==c)
返回(s+i);
}
返回(空);
}
为什么不运行它并检查结果呢?从外观上看,它不会损坏你的电脑。另外,对返回的值进行处理。不,您所做的不正确。一个简单的测试就会告诉你。你认为ptr
指向什么?如果条件s[i]==c
从来都不是真的呢?然后返回什么?另外,当您执行*ptr=i
时,ptr
指向哪里?您是否应该返回索引或s
(即&s[i]
)中的当前位置?但是如果条件从来都不是真的,您现在不返回任何内容,这将导致未定义的行为。就像取消引用未初始化的指针一样,比如ptr
。为什么不运行它并检查结果呢?从外观上看,它不会损坏你的电脑。另外,对返回的值进行处理。不,您所做的不正确。一个简单的测试就会告诉你。你认为ptr
指向什么?如果条件s[i]==c
从来都不是真的呢?然后返回什么?另外,当您执行*ptr=i
时,ptr
指向哪里?您是否应该返回索引或s
(即&s[i]
)中的当前位置?但是如果条件从来都不是真的,您现在不返回任何内容,这将导致未定义的行为。就像取消引用未初始化的指针,如ptr
。但这还不足以修复函数中的所有错误。以下是我发现的奇怪之处。如果您在设置后立即返回ptr
,为什么还要麻烦使用它呢?不过,这还不足以修复函数中的所有错误。如果您在设置后立即返回ptr
,为什么还要麻烦它呢