将指针数组传递给函数

时间:2015-07-11 17:41:21

标签: c arrays pointers

#include <stdio.h>
#include <stdlib.h>


void getline(char *line, int lim)
{
    int len = 0;
    char c;
    while (len < lim)
    {
        if ((c=getchar()) != EOF && c != '\n')
        {
            *line++ = c;
            printf("reading %c\n", c);
            len++;
        }
        else
            break;
    }

    *line = '\0';
}


int main()
{
    char (*lines)[500]; // pointer to array with 500 chars
    char *linetwo[4]; //why doesnt this work????  array of 4 pointers.


    getline(*lines, 500);
    getline(*linetwo, 500); // !!!!ERROR!!!

    printf("%s", *lines);

    system("PAUSE");
    return 0;

}

我遇到了这段代码的问题。我想要四行输入,每行最多有500个字符。我写了一个 getline 函数将它保存到char *指针。但是,当我初始化指针数组时, getline 会出错。

我认为,(*lines)[500]*lines[4]之间的唯一区别是,它是否未指定行数或字符数。

请帮助我理解为什么在* linetwo [4]初始化之后将* linetwo传入getline会给出错误。

4 个答案:

答案 0 :(得分:3)

你的指针并不指向任何东西,但你使用它们就好像它们一样。这更接近你可能需要的。

int main()
{
    char (*lines)[500] = malloc(sizeof *lines);
    char *linetwo[4] = { malloc(500) }; // other three pointers will be NULL

    getline(*lines, sizeof *lines);
    getline(*linetwo, 500); // or linetwo[0]

    printf("%s", *lines);
    system("PAUSE");

    free(lines);
    free(linetwo[0]);
    return 0;    
}

注意:上面没有执行错误检查。请自行决定使用。另请注意,getline可能与POSIX库函数getline发生冲突,这完全是另一个问题。

答案 1 :(得分:0)

char * lines[10]; 

声明并分配一个指向char的指针数组。每个元素都必须 被单独解除引用。

char (* lines)[10]; /* invalid until assigned or malloc'ed) */ 

声明(不分配)指向char(&#39; s)数组的指针。该 必须取消引用指向数组的指针才能访问每个数组的值 元件。

答案 2 :(得分:0)

要传递函数中的指针数组,只需传递数组名称而不使用'*'

并用

更改函数声明
void getline(char *line[], int lim)

并使用

进行调用
getline(linetwo, 500);

这是最简单的方法

答案 3 :(得分:0)

void getline(char *line, int lim)

此函数需要一个指针。

您正在将指针数组传递给它(*linetwo[4])。因此会出错。

要通过*linetwo[4]传递此功能,您可以执行此操作

void getline(char **line, int lim)