我必须编写一个函数来查找具有给定数组的给定代码的产品.如果找到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)
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(),则可以完全避免此代码