我正在尝试使用函数getline()
,它嵌入在另一个检查一些简单条件的函数中:
int scanItem( char ** list, size_t size ){
int res = getline( list, &size, stdin );
if ( res > 5 && res < 100 ){
return 1;
}
return 0;
}
我想把来自stdin流的每一个新行存储到一个字符串数组中的一个新字符串中,但似乎有一个问题,每次我加载输入时,在它被新的替换之前加载的那个。
int main(void){
char ** inputList = (char**)malloc( sizeof(char) * 100 * 100 );
size_t size = 100*100;
int i = 0;
while ( scanItem(&inputList[i], size) == 1 ){
i++;
}
if ( ! feof(stdin) ){
error();
}
return EXIT_SUCCESS;
}
不确定我是否正确使用了该功能...
1条答案
按热度按时间rdrgkggo1#
为了让
getline
为每个调用分配新指针,传递给它的指针需要指向NULL。它为10000/sizeof(char *)指针分配空间,但不初始化它们,因此当
getline
读取这些未初始化的指针时,会出现未定义的行为。为100个指针分配空间,并将它们都初始化为0。然后,对于循环,您需要类似于以下内容:
这确保了你不会在列表末尾运行。
size
的值并不重要,因为如果指针为NULL,getline
会忽略输入值,scanItem
会丢弃返回值。