回 帖 发 新 帖 刷新版面

主题:sizeof为2,strlen为31

/**++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  *这段代码把.gjf格式的文件中原子信息拷贝出来,将元素标志存储在数组element中,将原子位置坐标存
  *储在数组cart中
  *++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX 2000

int main(int argc, char *argv[])
{
    FILE *in;
    float x,y,z, cart[MAX][3];
    char ch, tmp[10], element[MAX][3];
    int count, n=0;

    if((in=fopen(argv[1],"r")) == NULL){
        printf("Can't open file!");
        exit(1);
    }

/*读文件,并正确获取元素标志以及(x,y,z)坐标*/
    while((ch=getc(in)) != EOF)
        for(count=0; fscanf(in, "%s%f%f%f", tmp, &x, &y, &z) == 4; count++){
            element[count][0]=tmp[0];
            element[count][1]=tmp[1];
            element[count][2]='\0';     //字符串数组需要用'\0'来结尾,否则内容会“越界”
            cart[count][0]=x;
            cart[count][1]=y;
            cart[count][2]=z;
        }
/*识别元素标志*/
    for(count=0; element[count][0]!='\0'; count++)
        printf("%2d\t%2s\t%d\t%d\n",count, element[count],
               strlen(element[count]), sizeof(element[count]));
    fclose(in);

    return 0;
}
mts@ubuntu-unity:~/Primer_Plus$ ./test g.gjf
0         u        1        3
1        Cu        2        3
2        Cu        2        3
3        Cu        2        3
4        Cu        2        3
5        Cu        2        3
6        Cu        2        3
7        Cu        2        3
8        Cu        2        3
9        Cu        2        3
10        Cu        2        3
11        Cu        2        3
12        Cu        2        3
13        Cu        2        3
14        Cu        2        3
15        Cu        2        3
16         N        1        3
17         H        1        3
18         H        1        3
19        Tv        2        3
20        Tv        2        3
21        Tv        2        3
*** stack smashing detected ***: ./test terminated
已放弃 (核心已转储)
1、首行输出应该为Cu,现在变成了u,怎么修改呢?
2、程序是被异常终止的,这是什么原因,应该如何修改?

谢谢。

这是用到的g.gjf文件

%chk=2-d.chk
  # pbepbe/3-21g/auto

  Title Card Required

  0 2
  Cu 0.00000000 0.00000000 0.00000000
  Cu -1.27152577 2.20234546 0.00000000
  Cu 2.54305000 0.00000000 0.00000000
  Cu 1.27152423 2.20234546 0.00000000
  Cu 0.00000000 0.00000000 6.25786859
  Cu -1.27152577 2.20234546 6.25786859
  Cu 2.54305000 0.00000000 6.25786859
  Cu 1.27152423 2.20234546 6.25786859
  Cu 1.27152474 0.73411515 4.17254272
  Cu -0.00000103 2.93646061 4.17254272
  Cu 3.81457474 0.73411515 4.17254272
  Cu 2.54304897 2.93646061 4.17254272
  Cu -0.00000051 1.46823031 2.08301468
  Cu -1.27152628 3.67057577 2.08301468
  Cu 2.54304949 1.46823031 2.08301468
  Cu 1.27152372 3.67057577 2.08301468
  N 0.52295394 1.19172963 7.72778695
  H 1.32628647 1.22326721 8.37113887
  H -0.28259955 1.24167882 8.36798725
  Tv 5.08610000 0.00000000 0.00000000
  Tv -2.54305154 4.40469092 0.00000000
  Tv 0.00000000 0.00000000 21.01084000

回复列表 (共1个回复)

沙发

顶顶顶 顶一顶顶一顶,谢谢分享[url=http://www.2ppt.cn/][color=#44444]免费ppt模板下载[/color][/url]

我来回复

您尚未登录,请登录后再回复。点此登录或注册