如何在C中找到结构数组中的元素?

cad*_*ddy 5 c arrays struct

我必须编写一个函数来查找具有给定数组的给定代码的产品.如果找到product,则返回指向相应数组元素的指针.

我的主要问题是给定的代码应首先截断为7个字符,然后才与数组元素进行比较.

非常感谢你的帮助.

struct product *find_product(struct product_array *pa, const char *code) 

{   
char *temp;
int i = 0;
    while (*code) {
        temp[i] = (*code);
        code++;
        i++;
        if (i == 7)
            break;
    }
    temp[i] = '\0';

for (int j = 0; j < pa->count; j++)
    if (pa->arr[j].code == temp[i])
        return &(pa->arr[j]);
}
Run Code Online (Sandbox Code Playgroud)

小智 10

你为什么不在循环中使用strncmp?

struct product *find_product(struct product_array *pa, const char *code) 
{ 
   for (size_t i = 0; i < pa->count; ++i)
   {
      if (strncmp(pa->arr[i].code, code, 7) == 0)
          return &pa->arr[i];
   }
   return 0;
}
Run Code Online (Sandbox Code Playgroud)


Gop*_*opi 4

temp是一个未初始化的指针,并且您取消引用它,这将导致未定义的行为。

temp = malloc(size); // Allocate some memory size = 8 in your case
Run Code Online (Sandbox Code Playgroud)

我看到的另一个错误是

if (pa->arr[j].code == temp[i]) // i is already indexing `\0` 
Run Code Online (Sandbox Code Playgroud)

应该

strcmp(pa->arr[j].code,temp); // returns 0 if both the strings are same
Run Code Online (Sandbox Code Playgroud)

如果您可以使用strncmp(),则可以完全避免此代码