0

私のプログラムで何が起こっているのかわかりませんが、基本的には、ファイルから一連の文字列を読み取ろうとし、それをメインに戻してさらに処理する関数があります。これが私のコードです:

char* readFile(FILE* fpFile)
{
//  Local Declaration
char *ptr;
char temp[1000];

//  Statment
fgets(temp, sizeof(temp), fpFile);
ptr = temp;

return ptr;
}// readFile

この問題は、関数がポインターを main に戻すと発生します。文字列を印刷しようとしましたが、最初の数行だけが正しく、その後はジャンクになります。また、ptr関数readFileで印刷すると、完全に正常に印刷され、メインの印刷に戻されるポインターも正常に印刷されます。私が見逃しているものはありますか?どんな助けでも大歓迎です。

ここに私が得ている出力があります

2000 1990
New York-No. NJ; 21199865 19549649
Los Angeles area; 16373645 14531629
Chicago area; 9157540 8239820
Washington-Baltimore; 7608070 6727050
San Francisco area; 7039362 6253311
Philadelphia-Atlantic City area; 6188463 5892937
Boston\240\365\277_\377

入力量は 2 倍になるはずですが、4 分の 1 で止まっています。

4

2 に答える 2

4

char temp[1000];ローカルです。制御が外れるとreadFile()、そのメモリは他の目的に割り当てられる可能性があります。2 つの方法があります。ストレージをグローバル配列にするか、 を使用して動的に割り当てられたメモリにするかのいずれかmalloc()です。

char* readFile(FILE* fpFile)
{
//  Local Declaration
char *ptr = malloc(1000);

//  Statment
fgets(ptr, 1000, fpFile);

return ptr;
}// readFile
于 2013-05-03T04:13:20.973 に答える
0

変数は、関数のスコープ内でのみ存在することが保証されています。これには、 に割り当てたデータが含まれますtemp1000あとで言えば、それらの細胞にはどんなことでも起こる可能性があります。

関数には 2 つ目の問題があります。ターゲット機能を既に提供している既存の関数をラップしているようです。

だった

char* readFile(FILE* fpFile)
{
//  Local Declaration
char *ptr;
char temp[1000];

//  Statment
fgets(temp, sizeof(temp), fpFile);
ptr = temp;

return ptr;
}// readFile

作品

char* readFile(FILE* fpFile, char* ptr, int n)
{
//  Statment
fgets(ptr, sizeof(char)*n, fpFile);
ptr = temp;
return ptr;
}// readFile
void fun()
{
//somehow File*
int num = 1000;
char* pointer = (char*) malloc(sizeof(char)*num);
pointer = readFile(file,pointer,num);
}

あるべき

void fun()
{
//somehow File*
int num = 1000;
char* pointer = (char*) malloc(sizeof(char)*num);
fgets(file,pointer*sizeof(char));
}
于 2013-05-03T04:22:03.987 に答える