c - 在 C 中使用指针打印数组时出现问题

标签 c arrays pointers

我是指针的新手,我正在尝试实现一个简单的代码,我在其中读写一个数组,我还搜索两个给定索引之间的最小元素。 出于某种原因,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/

相关文章:

c - 使用 dos.h 在 TSR 编程中使用 keep(int,int) 函数

c - C 中的 for 循环用 && 定义

c++ - 在堆上创建静态数组?

适用于字节数组的 C++ 类(如字符上的字符串)

指向指针的指针数组 二维数组

c - 字符串初始化和使用 strdup() 有什么不同

javascript - 插入数组

c++ - 将普通指针转换到 std::shared_ptr 似乎不起作用

选择正确的号码

c - C 中整数的错误乘法