0

我有一个看起来像这样的字符串:

ATOM 3760 CB GLU B 208 21.707 20.319 45.764 0.0000 2.2350

我从一个文件中读取它。

我想把 208 变成一个整数。请注意,数字可能是 11208,在这种情况下,将占用 208 之前的两个空格。我正在尝试以下操作,但我一直遇到设置错误。想法?

char* line = NULL;
size_t len = 0;

int res_num;

while (getline (&line, &len, fp) != -1)
{

    sprintf(res_num,"%5.1d",atoi(line+22));
    printf("%d\n",res);

}
4

1 回答 1

4

您遇到了分段错误,因为您传递了一个未初始化的整数 ( res_num) 的值,其中sprintf()需要目标字符串缓冲区的地址。

您可以使用strtol()将字符串转换为整数,或atoi(). 这不是问题,问题在于您的sprintf()呼叫的随机内存覆盖。

printf()引用了一个未知变量res;你确定上面的代码甚至编译了吗?

您可以删除sprintf()并使用printf()

printf("found %d\n", atoi(line + 22));

或者,当然,将数字存储在变量中以供进一步处理:

const int res = atoi(line + 22);

printf("by the way, res=%d\n", res);
于 2013-06-24T09:50:00.900 回答