从文件读出来的记录都是char数组型的。我想把数字记录转成int型怎么转?
我试了一下atoi,但是好象不对。例如:
char a[2] = {'1','2'};
atoi(a) 后好象是120是我用的不对吗?怎么才对?

解决方案 »

  1.   

    FILE *p;
    p=fopen(......);
    然后调用
    int nOut=0;
    fscanf(p,"%d", &nOut);
    nOut得到就是一个int==============================
    下面的是mdsn里面的 一个例子#include <stdio.h>FILE *stream;void main( void )
    {
       long l;
       float fp;
       char s[81];
       char c;   stream = fopen( "fscanf.out", "w+" );
       if( stream == NULL )
          printf( "The file fscanf.out was not opened\n" );
       else
       {
          fprintf( stream, "%s %ld %f%c", "a-string", 
                   65000, 3.14159, 'x' );      /* Set pointer to beginning of file: */
          fseek( stream, 0L, SEEK_SET );      /* Read data back from file: */
          fscanf( stream, "%s", s );
          fscanf( stream, "%ld", &l );      fscanf( stream, "%f", &fp );
          fscanf( stream, "%c", &c );      /* Output data read: */
          printf( "%s\n", s );
          printf( "%ld\n", l );
          printf( "%f\n", fp );
          printf( "%c\n", c );      fclose( stream );
       }
    }
      

  2.   

    你这样已经造成了一个越界访问的错误了,只不过恰巧你a后面的两个字节是'0'和'\0'所以得到的是120如果你使用的是fread读取文件,一般来说就应该直接使用int*来访问你读取到的数据,譬如这样
    int ia[20];//假设你要读取20个int型数据
    fread(ia, 20, 4, fp);//这样就直接读取了,默认的到void*有一个转换,这个你可以不管如果使用的是fscanf读取文件,那么直接
    int ival;
    fscanf(fp, "%d", ival);//直接读一个十进制整数
      

  3.   

    怪我问得不好,干脆吧,怎么把char数组转成int?
      

  4.   

    char a[3] = {'1','2','3'};
    int i = atoi(a);就是这样的,我试了是对的呀。i=123
      

  5.   

    atoi要求字符串啊,你的
    char a[2] = {'1','2'};
    可不是一个标准的字符串。
    char a[3] = { '1', '2'}
    正解
      

  6.   

    不知道你要哪种形式的转换,把4个char组合成一个int也叫转换,把char[]里面的内容转换成int也叫转换,表面看起来你要的是后一种……
      

  7.   

    在我机器上把楼主的代码运行了一把
    发现是对的char a[2] = {'1','2'};
        int cc = atoi(a);那个cc是12,晕