c - 在C中如何将字符串的一部分转换为int?

标签 c string type-conversion int atoi

我有一个代码行如下,

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

这将给出34conv + 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_MAXINT_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/

相关文章:

python - text.replace(punctuation ,'' ) 不会删除 list(punctuation) 中包含的所有标点符号?

c - 为什么可以使用字符串文字来初始化 unsigned char 数组但不能初始化 unsigned char 指针?

c - SIGKILL 在 spoj-LKS 中

c++ - 使用libavcodec和VAAPI从C++编码视频

c# - C# (.NET 4.0) 中的快速字符串后缀检查?

android - 在 android 中将数据传递给 json 时单引号不起作用

c++ - LPCWSTR 到 char*,反之亦然

在 (Mikro) C 中将数组转换为数字

python - 将十六进制值写入文件 Python

c - 在循环中使用 printf 然后 scanf