0

我不确定我的程序发生了什么,但我基本上有一个函数试图从文件中读取一堆字符串并将其传递回 main 以进行进一步处理。这是我的代码:

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

应该有两倍的输入量,但它停止了四分之一。

4

2 回答 2

4

char temp[1000];是本地的。当控制退出时readFile(),该内存可能会分配给其他用途。有两种方式,一种是存储可以是全局数组,也可以是使用动态分配的内存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

变量只保证存在于函数的范围内。这包括您分配给 的数据temp。后记,任何事情都可以而且将会发生在这些1000细胞上。

您的函数还有第二个问题:它似乎在包装已经提供目标功能的现有函数。

曾是

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 回答