将字符串的第一部分转换为C中的数字

时间:2013-06-24 09:47:28

标签: c string parsing int

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

ATOM 3760 CB GLU B 208 21.707 20.319 45.764 0.0000 2.2350

我从一个文件中读到它。

我想把208变成一个int。请注意,该数字可能是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);

}

1 个答案:

答案 0 :(得分: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);