我有一个看似简单的问题,感觉它会有一个非常直接的答案。我以前曾多次以这种方式使用malloc,但由于某种原因,它没有分配足够的内存来包含文件中的数据-尽管我是C的新手,但我觉得我忽略了一些显而易见的东西,这让我很沮丧。如果有任何帮助,我将不胜感激。
文件
--------用户--------
ID:0
姓名:Chris
性别:m
年龄:21
代码
const int BUFFER = 64;
char **fileContent;
int i;
// Code that opens file - tested
fileContent = (char**)malloc(BUFFER * sizeof(char*));
for(i = 0; i < BUFFER; i++)
{
fileContent[i] = (char*)malloc(BUFFER * sizeof(char));
fgets(fileContent[i], BUFFER, fp);
}
我知道上面的一些实践很差,但这是我出于测试目的而隔离的一个部分。我遇到的问题是,只有文件的第一行被读取到fileContent数组中。VS调试器看起来像这样。。。
fileContent 0xblah{0xblah"--------用户--------\n"}
0xblah "--------- USERS ---------n" 45 '-'
fileContent下面的两个名称(我假设fileContent[I])不存在。有什么想法吗?提前感谢您的帮助。
您的代码似乎是正确的。检查malloc的返回值。例如
fileContent[i] = (char*)malloc( BUFFER * sizeof(char) );
if ( fileContent[i] == NULL )
{
printf( "Error in memory allocation." );
exit( -1 );
}
调试器只是不知道何时停止读取数组中的每个条目。它不知道应该从fileContent[0]
读取64个字节,然后从fileContent[1]
再读取64个——怎么可能呢?