繁体   English   中英

使用getline()动态分配具有动态分配的字符串元素的数组

[英]Dynamically allocated array with dynamically allocated string elements, using getline()

我正在尝试使用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) ,所以我认为从未创建过字符串。

我究竟做错了什么?

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;
}

关于这一行:

printf( "%s", (wordlist[3]) );

它试图打印错误的行。 并且它不是从文件中读取行的for()循环的一部分。

建议:

size_t lineLength = 0;
for( int i = 0; i < fileLines; i++ )
{
     getline( &(wordlist[i]), &lineLength, fp );
     printf( "%s\n", wordlist[i] );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM