大きなファイルを読みたいのですが、行の最初の文字が ""ではないのですが。 しかし、私が書いたコードは非常に遅いです。どのようにルーチンをスピードアップできますか? getlineではなく、より良い解決策がありますか?Cが大きなファイルをchar *配列に読み込むのが遅すぎる
void readString(const char *fn)
{
FILE *fp;
char *vString;
struct stat fdstat;
int stat_res;
stat_res = stat(fn, &fdstat);
fp = fopen(fn, "r+b");
if (fp && !stat_res)
{
vString = (char *)calloc(fdstat.st_size + 1, sizeof(char));
int dataEnd = 1;
size_t len = 0;
int emptyLine = 1;
char **linePtr = malloc(sizeof(char*));
*linePtr = NULL;
while(dataEnd)
{
// Check every line
getline(linePtr, &len, fp);
// When data ends, the line begins with space (" ")
if(*linePtr[0] == 0x20)
emptyLine = 0;
// If line begins with space, stop writing
if(emptyLine)
strcat(vString, *linePtr);
else
dataEnd = 0;
}
strcat(vString, "\0");
free(linePtr);
linePtr = NULL;
}
}
int main(int argc, char **argv){
readString(argv[1]);
return EXIT_SUCCESS;
}
'calloc' =' malloc' + memset(...、0、...) 'を一歩にします。 –
そして 'malloc(0)'は 'size_t'のために有効なアドレスを返しません、[getline](http://man7.org/linux/man-pages/man3 /getline.3.html)マニュアル: 'size_t len = 0;' ... 'getline(&len、&len、stream)' –
Thx!私はそれを修正しましたが、これは私のコードをスピードアップしませんでした;) –