我是指针的新手,我正在尝试实现一个简单的代码,我在其中读写一个数组,我还搜索两个给定索引之间的最小元素。 出于某种原因,write() 函数会打印出较大的值(我猜它们是存储值的位置)。当我运行 poz_minVal 函数时,我也会收到一个 SIGSECV。 我知道这是一个简单的问题,但我们将不胜感激任何帮助!
代码如下:
#include<stdio.h>
#include<stdlib.h>
int read(int *v, FILE *f){
int i,length;
fscanf(f,"%d",&length);
v = (int *)malloc(length*sizeof(int));
for(i=0;i<length;++i)
fscanf(f,"%d",v+i);
return length;
}
void write(int *v, int length, FILE *g){
int i;
for(i=0;i<length;++i)
fprintf(g,"%d ",*(v+i));
fprintf(g,"\n\n");
}
int poz_valMin(int *v, int length,int left,int right){
int k,mini = *v; //set mini as the 1st element in v
for(k=left;k<right;++k)
if(*(v+k) < mini)
mini = *(v+k);
return mini;
}
int main(){
FILE *f = fopen("datein.txt","r");
FILE *g = fopen("dateout.txt","w");
int *v, n = read(v,f);
write(v,n,g);
fprintf("The minimum value between the indexes 2 and 4 is: %d.\n\n",poz_valMin(v,n,2,4));
return 0;
}
最佳答案
barak manos
所说的都是对的,但让我指出另一种定义读取函数的方法。
int * read(FILE *f){
int *v,length;
fscanf(f,"%d",&length);
v = (int *)malloc(length*sizeof(int));
for(i=0;i<length;++i)
fscanf(f,"%d",v+i);
return v;
}
然后在 main 中你应该只写 v = read(f);
这看起来很干净并且简化了理解。
提示:
一旦您注意到 write 正在产生垃圾,您应该已经打印了数组 v,并且您可能已经发现了错误!!
关于c - 在 C 中使用指针打印数组时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41892767/