如何在C中返回指向数组的指针?

时间:2016-02-09 20:57:22

标签: c arrays pointers

我正在编写一个函数,该函数用于读取文件并将字符逐字符插入数组中,然后返回指向该数组的指针。文件允许的最大大小为2KB。

这就是我现在所拥有的:

int main(){
    char data[2048];
    char* data4=layer4(data);
}

char* layer4(char array[]){
    FILE *fp;
    fp=fopen("sendfile.txt","r+");
    fscanf(fp, "%c", array);
    for(int i=0; i<2048; i++){
        printf("%c\n",array[i]);
    }
    return &array;
}

6 个答案:

答案 0 :(得分:6)

您只需要返回:

return array;

答案 1 :(得分:3)

多个问题。有些暗示@Jay Kumar

char* layer4(char array[]){
    FILE *fp;
    fp=fopen("sendfile.txt","r+");

    // check if open succeeded
    if (fp == NULL) return NULL;   

    // Unclear why codes read only 1 char
    // fscanf(fp, "%c", array);
    // Suspect OP wants
    size_t i;
    for(i=0; i<2048; i++){
      if (fscanf(fp, "%c", &array[i]) != 1) break;
    }
    // Could have use fread()

    // More canonical to use type `size_t` than `int` to index arrays.
    // for(int i=0; i<2048; i++){
    for(size_t j=0; j<i; j++){
        printf("%c\n",array[j]);
    }

    // do not forget to put your toys away
    fclose(fp);

    // Simply return `array`
    // return &array;
    return array;
}

答案 2 :(得分:2)

  

返回指向该数组的指针

不,你不必这样做。

您可以将原型编写为void layer4(char array[])并直接修改array - 您在array内对layer4所做的更改将在该函数退出后保留。

答案 3 :(得分:2)

array已指向char。因此,您只需要返回array,而不是&array

请参阅此帖Arrays decaying into pointers

答案 4 :(得分:0)

array已经是一个指针。所以只需:return array;

答案 5 :(得分:0)

您的方法应该将数组作为数组或指针,因为它是一个指针,然后您可以将其作为自身返回。 try here

document.loanCalc.pay.value = Math.round(princ * intr / (1 - (Math.pow(1 / (1 + intr), term))));