【问题标题】:How to return a pointer to an array in C?如何在C中返回指向数组的指针?
【发布时间】:2016-02-09 20:57:21
【问题描述】:

我正在编写一个函数,该函数用于读取文件并将文本逐个字符插入到数组中,然后返回指向该数组的指针。文件允许的最大大小为 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;
}

【问题讨论】:

  • 为什么?你想通过回归实现什么?
  • 该数组将在其他函数调用中使用。
  • @freelancer05: 数组不用返回,主知道,就地修改。
  • @freelancer05,不要相信下面的答案。他们不会帮助你,因为你遇到的问题不是返回一些东西,而是首先阅读一些东西。
  • 为什么你只从文件中读取 1 个字符,然后从数组中打印 2048 个字符?除了第一个之外,所有这些都未初始化。

标签: c arrays pointers


【解决方案1】:

你只需要返回:

return array;

【讨论】:

  • 但请注意,它不是指向数组的指针,而是指向char 的指针。区别很重要。
  • 对这个错误的答案如何得到 3 个“+”或“ups”感到惊讶。 OP 没有读取文件的循环,scanf 将始终读入数组的第一个元素。正如 Sourav Gosh 指出的那样,无论如何都没有返回值,因为参数具有与返回值相同的指针。
  • @Jay Kumar R strcpy() 和许多标准函数返回相同的指针。函数是否返回值不是 OP 的核心问题。
  • @chux,没错。为什么你谈论返回值,而代码没有从文件中读取超过 1 个字符?为什么当中心问题是别的东西时每个人都回答返回值?
  • @Jay Kumar R 我提到了返回值作为对提到返回值的your comment 的评论。听起来我们同意关键问题不是返回值。
【解决方案2】:

多个问题。 @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;
}

【讨论】:

    【解决方案3】:

    返回指向该数组的指针

    不,你不必这样做。

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

    【讨论】:

      【解决方案4】:

      array 已经是指向char 的指针。所以你只需要返回array,而不是&amp;array

      请参阅此帖子Arrays decaying into pointers

      【讨论】:

        【解决方案5】:

        array 已经是一个指针。所以就这样做吧:return array;

        【讨论】:

          【解决方案6】:

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

          char* layer4(char array[])
          {
              ..
          
              return array;
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-02-07
            • 2021-06-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-03-22
            • 1970-01-01
            • 2018-07-29
            相关资源
            最近更新 更多