簡體   English   中英

將指針數組傳遞給函數

[英]Passing array of pointers into a function

#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會給出錯誤。

你的指針沒有指向任何東西,但你使用它們就好像它們一樣。 這更接近您可能需要的。

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沖突,這完全是另一個問題。

char * lines[10]; 

聲明並分配一個指向char的指針數組。 必須單獨解除引用每個元素。

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

聲明(不分配)指向char ('s)數組的指針。 必須取消引用指向數組的指針才能訪問每個元素的值。

要在函數中傳遞指針數組,只需傳遞數組名稱而不使用'*'

這會改變你的函數聲明

void getline(char *line[], int lim)

並打電話給

getline(linetwo, 500);

這是最簡單的方法

void getline(char *line, int lim)

這個函數需要一個指針。

你正在向它傳遞指針數組( *linetwo[4] )。因此給出一個錯誤。

要通過*linetwo[4]來傳遞此信息,您可以執行此操作

void getline(char **line, int lim)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM