请大家帮小弟我分析下这个fscanf()的有关问题!
请大家帮我分析下这个fscanf()的问题!!
我的程序中有这么一段代码
CString StrMap[100];
double line[100];
int NumFile,i;
FILE *fp;
fp=fopen(“1”, "r ");
fscanf(fp, "%d ",&NumFile);
for(i=0;i <NumFile;i++)
{
fscanf(fp, "%s ",StrMap[i],&line[i]);
}
fclose(fp);
文件1里的数据
3
w101te.hsd 0.000000
w102te.hsd 0.050000
w103te.hsd 0.100000
但输出的结果却是
w103te.hsd 0.000000
w103te.hsd 0.050000
w103te.hsd 0.100000
下断点调试发现StrMap数组的每个元素都等于w103te.hsd,中间对这个数组没有任何相关的操作,为什么会出现这种情况?郁闷了半天才找到问题出在这个数组,希望大家能帮我分析下是什么原因?
------解决方案--------------------
在循环中应该用下面的代码:
fscanf( fp, "%s %d ", StrMap[i].GetBuffer(MAX_BUFFER_LENGTH), &line[i] );
StrMap[i].ReleaseBuffer();
GetBuffer成员函数返回一个缓冲区用于修改字符串的内容,而ReleaseBuffer()则是用来释放这个缓冲区的。
如果直接用StrMap[i]的话会做类型转换把直接把内部的m_pszData变量转换成PCXSTR,这样做是不安全的,可能会发生内存越界等问题。
我的程序中有这么一段代码
CString StrMap[100];
double line[100];
int NumFile,i;
FILE *fp;
fp=fopen(“1”, "r ");
fscanf(fp, "%d ",&NumFile);
for(i=0;i <NumFile;i++)
{
fscanf(fp, "%s ",StrMap[i],&line[i]);
}
fclose(fp);
文件1里的数据
3
w101te.hsd 0.000000
w102te.hsd 0.050000
w103te.hsd 0.100000
但输出的结果却是
w103te.hsd 0.000000
w103te.hsd 0.050000
w103te.hsd 0.100000
下断点调试发现StrMap数组的每个元素都等于w103te.hsd,中间对这个数组没有任何相关的操作,为什么会出现这种情况?郁闷了半天才找到问题出在这个数组,希望大家能帮我分析下是什么原因?
------解决方案--------------------
在循环中应该用下面的代码:
fscanf( fp, "%s %d ", StrMap[i].GetBuffer(MAX_BUFFER_LENGTH), &line[i] );
StrMap[i].ReleaseBuffer();
GetBuffer成员函数返回一个缓冲区用于修改字符串的内容,而ReleaseBuffer()则是用来释放这个缓冲区的。
如果直接用StrMap[i]的话会做类型转换把直接把内部的m_pszData变量转换成PCXSTR,这样做是不安全的,可能会发生内存越界等问题。