我想通过字符串赋值,然后将字符串保存到文件中,使用下面的代码,发现文件中出现的是乱码,为什么?
        FILE *stream;
LPTSTR   list[30];
        int  numwritten;//,numread;   /* Open file in text mode: */
   if( (stream = fopen( "fread.out", "a+b" )) != NULL )
   {
        list[0] = "123";
      /* Write characters to stream */
      numwritten = fwrite( list, sizeof( LPTSTR ),4, stream );
    fclose( stream );
   }

解决方案 »

  1.   

    五处错误。
    一是list是一个指针数组,没有使用malloc、GlobalAlloc/LocalAlloc或new进行内存分配,就直接对指针数组成员list[0]赋值。
    二是TSTR类型的字符串是以\0为结尾的。
    三是对字符串变量赋值时,除声明初始化时直接赋值外,必须使用类似strcpy函数,如strcpy(list[0],"123");
    四是使用fwrite保存时,保存的是指针地址,而不是一个字符串。
    五是保存字符串应使用strlen来获得长度,sizeof只能获得变量类型长度。
    修改后的代码如下:
    FILE *stream;
    LPSTR   list;
    int  numwritten;//,numread;/* Open file in text mode: */
    list = new char[30];
    if( (stream = fopen( "c:\\fread.out", "a+b" )) != NULL )
    {
    strcpy(list,"123");
    printf("%s\n",list);
    /* Write characters to stream */
    numwritten = fwrite(list,1,strlen(list), stream );
    fclose( stream );
    }
    delete list;
      

  2.   

    上面代码有误,应该是:
    FILE *stream;
    LPSTR   list;
    int  numwritten;//,numread;/* Open file in text mode: */
    list = new char[30];
    if( (stream = fopen( "c:\\fread.out", "a+b" )) != NULL )
    {
    strcpy(list,"123");
    printf("%s\n",list);
    /* Write characters to stream */
    numwritten = fwrite(list,1,strlen(list), stream );
    fclose( stream );
    }
    delete[] list; //此处上面写错了。
      

  3.   

    第二种写法:
    FILE *stream;
    LPSTR  list="123";
    int  numwritten;//,numread;/* Open file in text mode: */
    if( (stream = fopen( "c:\\fread.out", "a+b" )) != NULL )
    {
    /* Write characters to stream */
    numwritten = fwrite(list,1,strlen(list), stream );
    fclose( stream );
    }
      

  4.   

    非常感谢lyserver 和Mackz !!