我正在尝试使用 getline()
创建一个动态分配的数组,其中包含动态分配的字符串元素。
这是我的代码,
char** getWordlist()
{
FILE* fp = fopen( "Wordlist", "r" );
if( errno == ENOENT )
fp = fopen( "Wordlist", "w+r" );
if( !fp ) {
perror( "Could not open wordlist" );
exit(EXIT_FAILURE);
}
int c, fileLines = 0;
do{
c = fgetc(fp);
if( c == '\n')
fileLines++;
} while( c != EOF );
rewind(fp);
char** wordlist = calloc( fileLines, sizeof(char*) );
for( c = 0; c < fileLines; c++ )
getline( &wordlist[c], 0, fp );
printf( "%s", (wordlist[0]) );
fclose(fp);
return wordlist;
}
但是,printf
打印输出 (null)
,所以我认为这些字符串从未创建过。
What am i doing wrong?
最佳答案
getline()
的错误使用
传递地址 size_t
而不是 0
。
for( c = 0; c < fileLines; c++ )
// getline( &wordlist[c], 0, fp );
size_t size = 0;
getline( &wordlist[c], &size, fp );
在行数计算中将潜在的偏差修正为 1
int c;
size_t fileLines = 0;
int previous = '\n';
while ((c = fgetc(fp)) != EOF) {
if( previous == '\n') fileLines++;
previous = c;
}
关于c - 使用 getline() 动态分配的具有动态分配的字符串元素的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34138258/