Rick York
Вы можете выделить массив в одной строке кода, но для его загрузки требуется дополнительный код. Сообщение Ричарда показывает, как выделить память для массива. Вот фрагмент кода, который может помочь вам загрузить массив.
struct ST
{
char * sFile;
FILE * pfFile;
int lineCount;
int maxLines;
char** arsFileData;
};
void InitializeStructure( struct ST * pst, int lines )
{
pst->arsFileData = (char **) malloc( lines * sizeof(char*) );
pst->maxLines = lines;
pst->lineCount = 0;
pst->sFile = NULL;
pst->pfFile = NULL;
}
void ReleaseStructure( struct ST * pst )
{
int x;
for( x = 0; x < pst->lineCount; ++x )
free( pst->arsFileData[ x ] );
free( pst->pst->arsFileData );
}
void AddTextLine( struct ST * pst, const char * text )
{
int index = pst->lineCount;
if( index >= pst->maxLines )
return; // request exceeds available storage
pst->arsFileData[ index ] = strdup( text );
++pst->lineCount;
}
Я включил функцию, чтобы освободить выделенную память, потому что хорошо себя ведет программное обеспечение всегда убирает за собой. Чтобы использовать его вы могли бы сделать это :
struct ST st1;
InitializeStructure( & st1, 128 ); // initialize to expected number of entries
AddTextLine( & st1, "this" );
AddTextLine( & st1, "that" );
AddTextLine( & st1, "other" );
AddTextLine( & st1, "who" );
AddTextLine( & st1, "what" );
AddTextLine( & st1, "when" );
AddTextLine( & st1, "where" );
AddTextLine( & st1, "why" );
// do something with st1 here
ReleaseStructure( & st1 ); // release allocated memory
Brian Oh
Спасибо за информацию. Я принял Ричарда, потому что он был первым, и я справляюсь с остальными нормально и аналогичным образом, но дополнительная информация отмечена.