c - 函数中的分段错误
问题描述
我想在数组中找到整数的地址。调试器显示第 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);
使用此修复程序,代码似乎在简单情况下运行良好。
推荐阅读
- azure - 在同一项目中使用不同类型的 Azure Functions 的规则(Azure Function App)
- python-3.x - 无法将数据从 react-native 应用程序发送到 python 服务器
- javascript - Is React compatible with Odoo?
- angular - 访问 DOM 中表示 Angular 组件的对象
- google-data-studio - Filter record based on most recent record for Each ID in Google Data Studio
- mysql - How to add missing trailing slash on all links (WPCLI or MySQL)
- c# - Run Visual Studio project in VS Code
- python - Byte slicing using brackets for unpack
- axios - axios retry on error code response with delay
- python - GraphView边缘过滤器与顶点过滤后的原始Graph相同