我有一个看起来像这样的字符串:
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);
}
答案 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);