当前位置:首页
开发技术指南» 文章正文
    引言:

    摘要: 事情是这样的: boss前两天让我写一篇某种木马的技术分析文章,由于在文章中的文字描述部分中我引用了某网友的一段话,为了表明这句话我不是出于我的手,我在这句话加了下划线标注。文章后附上那网友的网名。 boss今天向我要文章,我把文章传给他,他看后,他找到我说:“这是内部刊物,可以把下划线去掉,可你那个下划线我怎么弄都弄不掉啊?” “不会吧,应该弄的掉的!” 于是我与他一起到他办公室去,在他......
    摘要: 小弟直接用vc6.0打开.dsp文件,按照提示创建新工作空间后,vc又提示"the makefile was not generated by developer studio.然而点继续后并没有包含下的那些援文件阿?!!迷惑中--- 请问该怎么打开阿?? ......


文件操作

我写了下面一段程序,是从input.txt中读取数据然后存入类数组a中,input.txt   数据如下:  
  1     wang   14  
  2     li       20  
  3     zhang   35  
   
  可是a数组的输出如下:  
  1     zhang   14  
  2     zhang   20  
  3     zhang   35  
  不知道是怎么回事?请指教!谢谢!  
   
  #include<fstream.h>  
  #include<iostream.h>  
  #include<stdlib.h>  
  class   li{  
  public:  
    int   id;  
    char   *name;  
    int   age;  
   
  };  
   
   
  void   main()  
  {  
           
  li   a[3];  
  int   id1;  
  char   name1[8];  
  int   age1;  
  ifstream   input;  
  input.open("input.txt");  
  for(int   j   =   0;   j   <   3;   j++)  
  {  
        input   >>   id1;  
        a[j].id   =   id1;  
        input   >>   name1;  
                a[j].name   =   name1;  
        input   >>   age1;  
        a[j].age=age1;  
   
  }  
   
  for(   j   =   0;   j   <   3;   j++)  
    cout   <<   a[j].id   <<   "   "   <<   a[j].name   <<   "   "   <<   a[j].age   <<   endl;  
          input.close();  
   
   
   
   
   
  }  
   
 

NO.1   作者: ericzhangali

自己跟一下没?

NO.2   作者: zhousqy

a[j].name   =   name1;  
  ------------------  
    if   ((a[j].name   =   (char   *)malloc(sizeof(char)*(strlen(name1)+1))   !=   NULL)  
              strcpy(a[j].name,name1);

NO.3   作者: llf_hust

#include<fstream.h>  
  #include<iostream.h>  
  #include<stdlib.h>  
  class   li{  
  public:  
    int   id;  
    char   *name;  
    int   age;  
   
  };  
   
   
  void   main()  
  {  
           
  li   a[3];  
  int   id1;  
  char   name1[8];  
  int   age1;  
  ifstream   input;  
  input.open("input.txt");  
  for(int   j   =   0;   j   <   3;   j++)  
  {  
        input   >>   id1;  
        a[j].id   =   id1;  
        input   >>   name1;  
                        a[j].name   =   new   char[20];     //分配空间  
                        strcpy(a[j].name,name1);  
                        input   >>   age1;  
        a[j].age=age1;  
   
  }  
   
  for(   j   =   0;   j   <   3;   j++)  
    cout   <<   a[j].id   <<   "   "   <<   a[j].name   <<   "   "   <<   a[j].age   <<   endl;  
          input.close();  
   
   
   
   
   
  }  
 

NO.4   作者: zhousqy

if   ((a[j].name   =   (char   *)malloc(sizeof(char)*(strlen(name1)+1)))!=   NULL)  
              strcpy(a[j].name,name1);  
 

NO.5   作者: sinkinglife

#include<fstream.h>  
  #include<iostream.h>  
  #include<stdlib.h>  
  #include<string.h>  
  class   li{  
  public:  
    int   id;  
    char   name[8];//注意这里  
    int   age;  
   
  };  
   
   
  void   main()  
  {  
           
  li   a[3];  
  int   id1;  
  char   name1[8];  
  int   age1;  
  ifstream   input;  
  input.open("d:\\a.txt");  
  for(int   j   =   0;   j   <   3;   j++)  
  {  
        input   >>   id1;  
        a[j].id   =   id1;  
        input   >>   name1;    
                strcpy(a[j].name,name1);  
        input   >>   age1;  
        a[j].age=age1;  
         
   
  }  
   
  for(   j   =   0;   j   <   3;   j++)  
    cout   <<   a[j].id   <<   "   "   <<   a[j].name   <<   "   "   <<   a[j].age   <<   endl;  
          input.close();  
   
   
  }  
   
   
   
 

NO.6   作者: CWestWolf

input   >>   name1;  
  a[j].name   =   name1;  
  -------------------------  
  because   all   three   as   names   point   to   the   same   memory:namel,   and   its   value   is   the   last   name   you   read   in.  
   
  you   would   do   like   this:  
   
  #include<fstream>  
  #include<iostream>  
  #include<stdlib.h>  
  using   namespace   std;  
   
  class   li{  
  public:  
  int   id;  
  char   name[8];  
  int   age;  
   
  };  
   
   
  void   main()  
  {  
   
  li   a[3];  
  int   id1;  
  char   name1[8];  
  int   age1;  
  ifstream   input;  
  input.open("input.txt");  
  for(int   j   =   0;   j   <   3;   j++)  
  {  
  input   >>   id1;  
  a[j].id   =   id1;  
  input   >>   name1;  
  strcpy(a[j].name,name1);  
  input   >>   age1;  
  a[j].age=age1;  
   
  }  
   
  for(   j   =   0;   j   <   3;   j++)  
  cout   <<   a[j].id   <<   "   "   <<   a[j].name   <<   "   "   <<   a[j].age   <<   endl;  
  input.close();  
   
  int   stop;  
  cin>>stop;  
   
  }  
   
   
 

NO.7   作者: mostideal

好像都改的差不多了。。

NO.8   作者: WoodJohn

你令3个对象的name成员指针都指向name1,最后一次读入name1的是zhang,所以都是zhang了。  
  可以作为一个例子载入教科书,描述C指针操作的误区

NO.9   作者: zdy_8212

if   ((a[j].name   =   (char   *)malloc(sizeof(char)*(strlen(name1)+1))   !=   NULL)  
              strcpy(a[j].name,name1);  
  这段比较好。呵。

NO.10   作者: WingForce

if   ((a[j].name   =   (char   *)malloc(sizeof(char)*(strlen(name1)+1))   !=   NULL)  
  strcpy(a[j].name,name1);  
  这段比较好。呵。  
  =====================================================  
  其实可读性较差,属于不好代码

NO.11   作者: xxyyboy

1。ifstream     流是按照空格或者你可以指定的分割付来分割数据流的,所以没必要用循环,用while就可以了。  
  2。类中的name   只是一个指针,定义成数组或者自己new空间。


 ·紧求助    »显示摘要«
    摘要: 各位老大,如何把多条sql语句的结果绑定在datagrid中,我现在重新帮定一下原来的记录全没有了,我想在保持原来的记录的后面进行追加其sql的值,请各位老大指点我,我想了一下午了, ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE