我的程序是这样的:  char   *fname[200];
  int i=0;
  while(flag)
   {
     fname[i]=FindFileData.cFileName;//FindFileData是WIN32_FIND_DATA定义的结构体,FindFileData.cFileName是获取的文件的名字
      i++;
     //
       flag标志的操作
    //   }  FILE *output;
  output=fopen("name.txt","w");  for(int j=0;j<i;j++)
   {
     fprintf (output,"\n the %d file's name is %s",j,fname[j]); 
   }调试程序,FindFileData.cFileName每次循环都正确,为不同文件的名字(WORD类型),但是最终程序输出文件name.txt中名字都是最后一个文件的名字,好像之前的
名字都被最后一个覆盖掉了,不知道是怎么回事?
   请教各位了!非常感谢!

解决方案 »

  1.   

    你得cFileName是什么类型,如果也是指针的话,应当memcpy之类的函数将数据拷贝到fname中,否则的话如果cFileName析构,存储在fname中的指针就也跟着析构了
      

  2.   

     FindFileData是这样定义的:WIN32_FIND_DATA FindFileData;而WIN32_FIND_DATA的定义为:typedef struct _WIN32_FIND_DATA { // wfd 
        DWORD dwFileAttributes; 
        FILETIME ftCreationTime; 
        FILETIME ftLastAccessTime; 
        FILETIME ftLastWriteTime; 
        DWORD    nFileSizeHigh; 
        DWORD    nFileSizeLow; 
        DWORD    dwReserved0; 
        DWORD    dwReserved1; 
        TCHAR    cFileName[ MAX_PATH ]; //调用这个成员
        TCHAR    cAlternateFileName[ 14 ]; 
    } WIN32_FIND_DATA; 
     
      

  3.   

    首先要为200个fname的char*类型指针分配内存,保存文件路径分配MAX_PATH大小即可。其次字符串赋值要用strcpy或其他函数来拷贝而不是直接对指针赋值。
      

  4.   

    你这样的循环,fname[x]的值应该不会改变,因为一直指向同一个结构实例的成员
    你需要拷贝其数据(每次填充的),而不是其地址
      

  5.   

      TCHAR    *fname[200]; 
      int i=0; 
      while(flag) 
      { 
        fname[i]=FindFileData.cFileName;//这里使用strcpy()进行拷贝操作!!
          i++; 
        // 
          flag标志的操作 
        //   } 
      

  6.   

    还有,我不知道上面那个cFileName[ MAX_PATH ]中MAX_PATH代表什么含义?
      Mack所说  保存文件路径分配MAX_PATH大小即可 是什么意思呢?
        谢谢。
      

  7.   

    我改成这个样子:strcpy(fname[i],FindFileData.cFileName);
    编译没有错误,运行是就有错误了。说是内存不能为“writen”
      

  8.   

    首先要为200个fname的char*类型指针分配内存
      

  9.   

    MAX_PATH可以是一个宏,指定开辟数组的大小,具体数值由你指定。
      

  10.   

    fname是指针数组,该数组的每一项分别是一个指针,但其指向的地址需要由你来开辟空间才可以进行字符串拷贝。
    另外这些动态开辟的空间需要在使用完毕之后释放删除。
    如果嫌麻烦或操作要求不高可以直接定义二维数组。