我想在数组中找到整数的地址。调试器显示第 8 行有故障。if (*i==item) {ans=i;};
变量ans
是局部的,不为空,但会发生分段错误。 为什么会这样,我该如何解决?
#include <stdio.h>
int* finder(int *begin, int *end, int item)
{
int *ans=0; int *i=begin;
while (i<end) {
if (*i==item) {ans=i;};
i++;
}
return ans;
}
int main()
{
int arSize, target, i=0;
int arr[10]={};
int *first=&arr[0]; int *last; int *result;
printf("Find element: ");
scanf("&d",&target);
printf("Array size: ");
scanf("&d",&arSize);
printf("Enter array: ");
while (i<arSize){
scanf("&d",&arr[i]);
i++;
}
last=&arr[arSize];
result=finder(first,last,target);
printf("%s %p","Target's address is ",result);
return 0;
}
scanf()
格式有拼写错误:他们使用'&'
而不是'%
。因此,程序(如发布时(不会读取任何输入。
建议:在尝试运行(或调试(之前,请确保获得CLEAN编译(无警告,无错误(。GCC 使用默认的"cc"标记格式错误。
ff.c:22:11: 警告:格式参数太多 [-wformat-extra-args]
scanf("&d",&target); ^~~~
需要3 个修复。
scanf("&d",&target);
scanf("&d",&arSize);
scanf("&d",&arr[i]);
例如:
printf("Array size: ");
// BAD: scanf("&d",&arSize);
scanf("%d",&arSize);
使用此修复程序,代码似乎在简单情况下运行良好。
如果 arSize 等于 10,它可能在 finder(( 中的最后一次迭代中失败。
你声明了一个数组 'arr[10]',所以这意味着最后一个元素的索引等于 9,而不是 10 :)
所以,你应该在main((中改变一行:
last=&arr[arSize];
自:
last=&arr[arSize-1];
当然,您应该始终检查 arSize 是否为 <= 10。