gpt4 book ai didi

c - 查找数组中给定字符串的索引

转载 作者:行者123 更新时间:2023-11-30 18:15:24 24 4
gpt4 key购买 nike

我正在写一个函数findTarget(),它搜索目标名称字符串是否已存储在字符串数组中。

其中nameptr是用户输入的字符串数组,size是数组中存储的名称数量target 是目标字符串。如果找到目标字符串,该函数将返回其索引位置,或-1否则的话。

#include <stdio.h>
#include <string.h>
int findTarget(char *target, char nameptr[][80], int size);
int main()
{
int num, i;
char target[100];
char names[10][100];
printf("Enter no. of names:");
scanf("%d", &num);
printf("Enter %d names: ", num);
for (i = 0; i < num; i++)
{
scanf("%s", names[i]);
}
printf("Enter target name: ");
fflush(stdin);
gets(target);
printf("findTarget(): %d", findTarget(target, names, num));

}

int findTarget(char *target, char nameptr[][80], int size)
{
int i;
for (i = 0; i < size; i++)
{
if (strcmp(target,nameptr[i]) == 0)
{
return i;
}
}
return -1;
}

我确实知道不建议使用 gets(),但我们将把它放在一边。不知怎的,只有当我找到的目标恰好位于索引 0 时它才有效。如果它在其他索引中,它就会失败。

最佳答案

问题是该函数使用第二个参数声明为指向 char [80] 类型数组的第一个元素的指针

int findTarget(char *target, char nameptr[][80], int size);

但是,在 main 内部,您传递了一个定义为元素类型为 char[100] 的数组。

char names[10][100];

因此该函数具有未定义的行为。

在 main 中重新声明数组

char names[10][80];

考虑到您应该检查输入的 num 值应小于或等于 10。

对于我来说,我会按以下方式声明该函数

size_t findTarget( const char nameptr[][80], size_t size, const char *target ); 

至于功能gets它现在不是标准函数,因为它不安全。来自 C 标准

removed the gets function ()

您可以使用例如 fgets反而。

您也可以使用标准 C 函数 bsearch在 header <stdlib.h> 中声明如果数组已排序。

#include <stdlib.h>
void *bsearch(const void *key, const void *base,
size_t nmemb, size_t size,
int (*compar)(const void *, const void *));

关于c - 查找数组中给定字符串的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28984382/

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