我试图使用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打印输出,所以我认为字符串从未创建过。
我做错什么了?

最佳答案

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/

10-11 08:53