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

如何在C中返回指向数组的指针?,c,arrays,pointers,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

我正在编写一个函数,它读取一个文件并将文本字符逐个插入数组,然后返回指向该数组的指针。文件允许的最大大小不支持为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;
}
intmain(){
字符数据[2048];
char*data4=第4层(数据);
}
char*layer4(char数组[]){
文件*fp;
fp=fopen(“sendfile.txt”、“r+”);
fscanf(fp,“%c”,数组);

对于(int i=0;i您只需要返回:

return array;
返回指向该数组的指针

不,你不必那么做


您可以将原型编写为
voidlayer4(chararray[])
并直接修改
数组
-在
层4
中对
数组
所做的更改将在该函数退出后保留。

数组
已经指向
字符
。因此您只需返回
数组
,而不必返回
&array


请参阅本文。

数组已经是一个指针。所以只需执行以下操作:
返回数组;
多个问题。一些问题由

char*layer4(char数组[]){
文件*fp;
fp=fopen(“sendfile.txt”、“r+”);
//检查打开是否成功
如果(fp==NULL)返回NULL;
//不清楚为什么代码只能读取1个字符
//fscanf(fp,“%c”,数组);
//嫌疑犯想要什么
尺寸i;

对于(i=0;i您的方法应该将数组作为数组或指针,因为它是指针,那么您可以将它作为自身返回


为什么?你想通过返回来实现什么?数组将在其他函数调用中使用。@Freedor05:你不必返回数组,main知道它,它已经被修改过了。@Freedor05,不要相信下面的答案。它们不会帮助你,因为你遇到的问题不是返回什么,而是首先要返回什么读入某些内容。为什么只从文件中读取1个字符,然后从数组中打印2048个字符?除第一个字符外,所有字符都未初始化。但请注意,它不是指向数组的指针,而是指向
char
。区别很重要。奇怪的是,这个错误的答案会得到3'+'或'ups'。OP没有循环r读取该文件时,scanf将始终读取数组的第一个元素。正如Sourav Gosh指出的,由于参数的指针与返回值相同,所以无论如何都没有返回任何内容。@Jay Kumar R
strcpy()
和许多标准函数返回相同的指针。函数是否返回值不是OP的中心问题。@恰克斯,没错。为什么你要谈论返回值,而代码从文件中读取的字符数不超过1个?为什么每个人都回答返回值,而中心问题是其他问题?@Jay Kumar R我提到过返回值作为对返回值的注释。听起来我们同意关键问题不是返回值。
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;
}
char* layer4(char array[])
{
    ..

    return array;
}