请大家帮小弟我分析下这个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,这样做是不安全的,可能会发生内存越界等问题。