读书人

c语言fscanf fprintf 乱码有关问题

发布时间: 2012-02-25 10:01:47 作者: rapoo

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都没分配空间。。。。怎么拷贝字符串
[解决办法]

C/C++ code
#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更方便和安全.

读书人网 >C语言

热点推荐