[英]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.