我想通过字符串赋值,然后将字符串保存到文件中,使用下面的代码,发现文件中出现的是乱码,为什么?
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 );
}
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 );
}
解决方案 »
- 想做一个这样的界面,请问该怎样实现?
- 窗口分割中出现 Debug Assertion Failed!
- MDI框架中,怎样获得菜单的指针?
- 一个奇怪的问题:线程在调用函数时,函数的参数不知道怎么回事被改变了!!
- vc++编译错误,请告诉我是什么问题,该如何解决
- 请教在ADO编程中对使用了group by的SQL语句如何使用PutFilter进行Where的过滤?
- 谁能给我一篇关于MFC 扩展Dll的编制与使用的原程序吗?
- Activex 问题
- 关于控件的 问题
- CTabCtrl控件的问题
- 怎么让同一个按钮,单击第一次的时候执行语句1(函数1),然后再单击,又执行语句2(函数2)?再单击又回来执行语句1(函数1)?
- 求一个网络聊天系统的可运行代码(VC)
一是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;
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; //此处上面写错了。
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 );
}