我的程序中有这么一段代码
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,中间对这个数组没有任何相关的操作,为什么会出现这种情况?郁闷了半天才找到问题出在这个数组,希望大家能帮我分析下是什么原因?
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,中间对这个数组没有任何相关的操作,为什么会出现这种情况?郁闷了半天才找到问题出在这个数组,希望大家能帮我分析下是什么原因?
StrMap[i].ReleaseBuffer();GetBuffer成员函数返回一个缓冲区用于修改字符串的内容,而ReleaseBuffer()则是用来释放这个缓冲区的。如果直接用StrMap[i]的话会做类型转换把直接把内部的m_pszData变量转换成PCXSTR,这样做是不安全的,可能会发生内存越界等问题。