将字符串的第一部分转换为C中的数字
我有一个字符串如下所示: 原子3760 CB GLU B 208 21.707 20.319 45.764 0.0000 2.2350 我从文件中读到的 我想把208转换成整数。注意,数字可能是11208,在这种情况下,208前面的两个空格将被占用。我正在尝试下面的方法,但我总是遇到一个错误。想法将字符串的第一部分转换为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) {
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中,对于您感兴趣的字符串块非常挑剔。