c语言fscanf fprintf 乱码问题
用fprintf把结构体数组node中内容写入文件dd.txt,再用fscanf把dd.txt中内容读出到结构体数组outer中却出现乱码。
完整代码如下:
#include "stdlib.h"
#include "stdio.h"
typedef struct node
{
int no;
char *name;
}Node;
void main()
{
int i =0;
FILE * fp;
Node node[2];
Node outer[2];
node[0].no = 1;
strcpy(node[0].name,"node1");
node[1].no = 2;
strcpy(node[1].name,"node2");
for(i = 0;i < 2;i ++)
printf("node[%d] name is : %s \n",i,node[i].name);
/*write the record to the file*/
fp = fopen("dd.txt","w");
for(i = 0;i < 2 ;i++)
fprintf(fp,"%d %s ",node[i].no,node[i].name);
fclose(fp);
/* read the record from the file*/
if((fp = fopen("dd.txt","r"))==NULL)
printf("error to open dd.txt");
for(i = 0;i < 2;i++)
fscanf(fp,"%d %s",&outer[i].no ,outer[i].name);
fclose(fp);
for(i = 0;i < 2;i ++)
printf("outer[%d] name is %s \n",i,outer[i].name);
getch();
}
另外,如果把上面程序的读文件部分放到另一个c程序中运行却可以正确读出已存在的dd.txt中的内容。
求助!
[解决办法]
node[0].no = 1;
strcpy(node[0].name,"node1");
node[1].no = 2;
strcpy(node[1].name,"node2");
name没有申请内存。
[解决办法]
。。。。你的node[0].name, node[1].name都没分配空间。。。。怎么拷贝字符串
[解决办法]
#include "stdlib.h" #include "stdio.h" #include "string.h"typedef struct node { int no; char *name; }Node; void main() { int i =0; FILE * fp; Node node[2]; Node outer[2]; node[0].no = 1; int len = strlen("node1")+1; node[0].name = new char[len]; outer[0].name = new char[len]; strcpy(node[0].name,"node1"); node[1].no = 2; len = strlen("node1")+1; node[1].name = new char[len]; outer[1].name = new char[len]; strcpy(node[1].name,"node2"); for(i = 0;i < 2;i ++) printf("node[%d] name is : %s \n",i,node[i].name); /*write the record to the file*/ fp = fopen("dd.txt","w"); for(i = 0;i < 2 ;i++) fprintf(fp,"%d %s ",node[i].no,node[i].name); fclose(fp); /* read the record from the file*/ if((fp = fopen("dd.txt","r"))==NULL) printf("error to open dd.txt"); for(i = 0;i < 2;i++) fscanf(fp,"%d %s",&outer[i].no ,outer[i].name); fclose(fp); for(i = 0;i < 2;i ++) printf("outer[%d] name is %s \n",i,outer[i].name); free(node[0].name); free(node[1].name); free(outer[0].name); free(outer[1].name);}
[解决办法]
你把
typedef struct node
{
int no;
char *name;//改成 char name[256];
}Node;
或者
node[0].name = (char*)malloc(strlen("nodel") + 1);
node[1].name = (char*)malloc(strlen("node2") + 1);
[解决办法]
typedef struct node
{
int no;
char *name;//改成 char name[256]; 或者直接用string吧.
}Node;
string更方便和安全.