我的程序中有这么一段代码
         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,中间对这个数组没有任何相关的操作,为什么会出现这种情况?郁闷了半天才找到问题出在这个数组,希望大家能帮我分析下是什么原因?

解决方案 »

  1.   

    在循环中应该用下面的代码:fscanf( fp, "%s %d", StrMap[i].GetBuffer(MAX_BUFFER_LENGTH), &line[i] );
    StrMap[i].ReleaseBuffer();GetBuffer成员函数返回一个缓冲区用于修改字符串的内容,而ReleaseBuffer()则是用来释放这个缓冲区的。如果直接用StrMap[i]的话会做类型转换把直接把内部的m_pszData变量转换成PCXSTR,这样做是不安全的,可能会发生内存越界等问题。