#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会给出错误。
答案 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)