首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

c语言fscanf fprintf 乱码有关问题

2012-02-25 
c语言fscanf fprintf 乱码问题用fprintf把结构体数组node中内容写入文件dd.txt,再用fscanf把dd.txt中内容

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更方便和安全.

热点排行