gpt4 book ai didi

c - 无法打印从函数返回的 char* 是怎么回事?

转载 作者:行者123 更新时间:2023-11-30 21:07:30 26 4
gpt4 key购买 nike

我构建了一个函数,用于搜索源字符串中的子字符串,并使用找到的子字符串的索引填充数组。

我调试它并且索引数组填充了正确的索引,但是当我返回指针并尝试打印它时,只是变成空白

#include <stdlib.h>
#include <string.h>

#define AUX_LENGTH 1000

char* find_sub_string(char *source,char *sub_string);

int main()
{
char text[]="yesterday i was walking";
char find[]="e";

printf("%s \n",find_sub_string(text,find));

return 0;
}

/*!
*Function to find the index of a substring in a source string
@param *source string source to search
@param *sub_string substring to find
@return result returns the indexs of the found subtring
@return NULL in case not found or subtring bigest than source string
*/

char* find_sub_string(char *source,char *sub_string)
{
size_t l_source=strlen(source);
size_t l_sub_string=strlen(sub_string);

if(l_sub_string>l_source)
return NULL;

char aux[AUX_LENGTH]="";
static char result[AUX_LENGTH];

int i,j;

for(i=0,j=0; i<l_source;i++)
{
memcpy(aux,source+i,l_sub_string);
if (memcmp(aux,sub_string,l_sub_string)==0)
{
result[j++]=i+1;
}
}
result[j]='\0';

if (j>0)
return result;
else
return NULL;
}

编辑:示例

char text[]="yesterday i was walking";
char find[]="e";
char *p=find_sub_string(text,find);

*p 必须是一个指针 char arra,带有所创建位置的索引,如下所示:*p={"25"} 2 和 5 是源中“e”的位置。

编辑2 我将代码更改为 size_t 的数组,无需 ASCII 转换就更容易处理,我可以使用 strstsr 但我必须嵌入另一个函数,因为我想在所有字符串,而不仅仅是与第一个数学保持一致。

这里的新代码感谢您的评论,我可以改进一些我将用 strstr 证明的事情:

size_t* find_sub_string(char *source,char *sub_string)
{
size_t l_source=strlen(source);
size_t l_sub_string=strlen(sub_string);

if(l_sub_string>l_source)
return NULL;

size_t *result = malloc(sizeof(size_t)*AUX_LENGTH);

size_t i,j;

for(i=0,j=0; i<l_source;i++)
{
if (memcmp(source+i,sub_string,l_sub_string)==0)
{
result[j++]=i+1;
}
}
result[j]='\0';

if (j>0)
return result;
else
return NULL;
}

int main()
{
char text[]="yesterday i was walking";
char find[]="y";
size_t *p=find_sub_string(text,find);
printf("%lu \n",p[0]);

return 0;
}

最佳答案

strstr这样的子字符串查找函数背后的想法是返回子字符串在字符串中的实际位置。在您的实现中,您实际上将子字符串复制到结果中。它几乎不值得搜索。

此实现返回实际位置或 NULL。

char *find_sub_string(char *source, char *sub_string)
{
size_t l_source=strlen(source);
size_t l_sub_string=strlen(sub_string);
int i,j;

if (l_sub_string>l_source)
return NULL;

for (i=0,j=0; i<l_source-l_sub_string;i++)
{
if (memcmp(source+i,sub_string,l_sub_string)==0)
return source+i
}

return NULL;
}

关于c - 无法打印从函数返回的 char* 是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43429773/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com