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

时间:2017-10-22 06:14:27

标签: 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'

有人可以帮我将该字符串中的数字转换为整数吗?

2 个答案:

答案 0 :(得分:2)

如果无法执行转换,

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",则会返回0ptr将指向conv的开头。

请注意,strtol()会返回long而非int

如果int的范围小于long的范围,您可能需要检查返回的值是否大于int的最大值INT_MAX签名int。 INT_MAX位于limits.h

如果由于字符串中的数字太大而无法在long中表示而发生溢出,则errno将设置为ERANGE(它在{{1}中}})。

errno.h

答案 1 :(得分:0)

您正在尝试使用atoi,根据文档说明:

  

如果str中的第一个非空白字符序列不是有效的整数,或者由于str是空的或者只包含空白字符而不存在这样的序列,则不执行转换并返回零。

您可以理解,您的代码转换无效。

以下是一些可行的示例代码:

  1. 正确使用atoi

    char conv[20]="34";
    printf("score: %d\n",atoi(conv)); //this prints 'score: 34'
    
  2. 使用strpbrk

    char conv[20]="score: 34";
    char breakset[] = "0123456789";
    printf("score: %d\n",atoi(strpbrk(conv, breakset))); //this prints 'score: 34'