我不确定我的程序发生了什么,但我基本上有一个函数试图从文件中读取一堆字符串并将其传递回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
应该有两倍的投入量,但它的停止时间只有四分之一。
答案 0 :(得分:4)
char temp[1000];
是本地的。当控件超出readFile()
时,该内存可能被分配给其他目的。有两种方法,存储可以是全局数组,也可以使用malloc()
动态分配内存。
char* readFile(FILE* fpFile)
{
// Local Declaration
char *ptr = malloc(1000);
// Statment
fgets(ptr, 1000, fpFile);
return ptr;
}// readFile
答案 1 :(得分: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));
}