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

将字符串的第一部分转换为C中的数字,c,string,parsing,int,C,String,Parsing,Int,我有一个字符串如下所示: 原子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) {

我有一个字符串如下所示:

原子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);

}

由于传递未初始化的整数(
res_num
)的值,
sprintf()
需要目标字符串缓冲区的地址,因此出现分段错误

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

另外,
printf()
正在引用未知变量
res
;你确定上面的代码已经编译过了吗

您可以删除
sprintf()
,只需使用
printf()

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

const int res = atoi(line + 22);

printf("by the way, res=%d\n", res);

由于传递未初始化的整数(
res_num
)的值,
sprintf()
需要目标字符串缓冲区的地址,因此出现分段错误

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

另外,
printf()
正在引用未知变量
res
;你确定上面的代码已经编译过了吗

您可以删除
sprintf()
,只需使用
printf()

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

const int res = atoi(line + 22);

printf("by the way, res=%d\n", res);

您应该拆分字符*然后使用atoi获取值您还可以使用sscanf扫描和拆分字符串。您应该拆分字符*然后使用atoi获取值您还可以使用sscanf扫描和拆分字符串。对不起,printf应该是printf(“%d\n”,res);printf(“%5.1d\n”,atoi(第+22行));给我需要的数字,但我如何分配给变量?
res_num=atoi(第+22行)成功了!谢谢出于好奇心,没有指定空间的数量来考虑它是如何知道数字的大小的。例如,在sprintf中,对于您感兴趣的字符串块非常挑剔;printf(“%5.1d\n”,atoi(第+22行));给我需要的数字,但我如何分配给变量?
res_num=atoi(第+22行)成功了!谢谢出于好奇心,没有指定空间的数量来考虑它是如何知道数字的大小的。例如,在sprintf中,对于您感兴趣的字符串块非常挑剔。