【发布时间】:2015-12-07 16:20:11
【问题描述】:
我正在尝试使用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),所以我认为从未创建过字符串。
我做错了什么?
【问题讨论】:
-
你的
int main(...);在哪里? -
为什么在
printf( "%s", (wordlist[3]) );中有3? -
如果
Wordlist不以'\n'结尾,则用于确定fileLines的方法将短1。 -
@Eijomjo 如果文件包含 3 个单词而不是您
wordlist[3]将访问索引超出范围并导致 未定义行为 。你可以有有效的索引0 ,1 ,2而不是3。不要访问索引3。 -
@Eijomjo 这个信息是必要的,有问题要提到。
标签: c arrays memory-management