c - memcmp 上的段错误

标签 c arrays pointers memcmp

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


int cauta(const void *x, int n, int dim_el, const void *el)
{
  char *c = (char*) x;
  int i;
  for(i = 0; i < n; i++)
  {
    if(memcmp(c + i * dim_el, el, dim_el) == 0)
      return 1;
  }
  return -1;
}

int main()
{
  int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
  int k;
  k = cauta(a, sizeof(a) / sizeof(a[0]), sizeof(a[0]), a[0]);
  printf("%d", k);
  return 0;
}

问题出现在注释行上。如果“x”数组中存在“el”,则该函数返回 1。这很简单,但我不明白为什么它是一个段错误。

Also, this is the call stack display when I tried debugging it line by line.

最佳答案

在您的代码中,函数参数是

 int cauta(const void *x,int n,int dim_el,const void *el)

其中 el 需要一个 const void *,而在调用时,

cauta(a,sizeof(a)/sizeof(a[0]),sizeof(a[0]),a[0]);

您传递了 a[0],它是一个 int

您需要传递一个地址,例如 &a[3]

也就是说,int main() 应该是 int main(void) 以符合标准。

关于c - memcmp 上的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34965377/

相关文章:

java - 查找二维方形数组中任意随机点的对角线

c++ - 我被这段使用指针访问二维数组中的值的代码所困扰

c - C 程序错误 - 解释

c++ - 为什么当天的第一次编译比接下来的慢?

我可以通过使其等于声明但未初始化的任何整数变量来改变数组的任何元素吗?

C - 如何运行一个线程几秒钟,然后继续运行第二个线程

java - 如何接受 byte[] 作为对 POST 的响应

c - 如何将参数传递给clone()调用的函数?

Java - war 游戏 - 从数组中获取对象

c++ - c++中指向引用的指针