我有一个代码行如下,
char conv[20]="score: 34";
我想提取“conv”字符串中的数字(34)并将其转换为整数。我使用了“atoi”功能。但它给出的结果是 0。
printf("score: %d\n",atoi(conv)); //this prints 'score: 0'
有人可以帮我将该字符串中的数字转换为整数吗?
最佳答案
如果无法执行转换,
atoi()
将返回 0
。看here .
字符串“score: 34”
无法转换为有效的int
。所以atoi()
返回0
。
如果字符串中的 34
之后没有其他内容,您可以这样做
printf("score: %d\n",atoi(conv + 7));
这将给出34
。 conv + 7
指向字符串"34"
。它相当于 conv + strlen("score: ")
。
使用strtol()
在这里代替 atoi()
可能会更好。
您可以使用 strtol()
更轻松地找到到底出了什么问题。
你可以像这样使用它
long rv=strtol(conv, &ptr, 10);
其中 ptr
的类型为 char *
或只是
rv=strtol(conv, NULL, 10);
如果conv
在这里是“score:34”
,则返回0
并且ptr
将指向start 转化
。
请注意,strtol()
返回一个 long
,而不是 int
。
如果int
的范围小于long
的范围,您可能需要检查返回值是否大于最大的int
> 对于有符号整数来说是INT_MAX
。 INT_MAX
位于 limits.h
中。
如果由于字符串中的数字太大而无法用long
表示而发生溢出,errno
将被设置为ERANGE
(它位于 errno.h
中)。
long rv=strtol(str, NULL, 10);
if(rv>INT_MAX || rv<INT_MIN || errno==ERANGE)
{
perror("something is wrong.");
}
关于c - 在C中如何将字符串的一部分转换为int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46871070/