本质上,我有一行以两个数字结尾。我能读这些数字,例如"4"one_answers"1"。我想将它们连接到"41"中,然后将其读取为值41的int类型。将单个字符转换为int是直接的,但对于两个(或更多(字符,这将如何工作?
我正在使用抓取字符
int first_digit = ctoi(line[1]);
int second_digit = ctoi(line[2]);
其中ctoi定义为:
int ctoi( int c ) // https://stackoverflow.com/a/2279401/12229659
{
return c - '0';
}
最简单的方法是使用sscanf
这样的函数(前提是该行是适当的字符串(
int num;
if (sscanf(line, "%d", &num) != 1) {
// handle conversion error
}
尽管scanf
通常不提供算术溢出保护,因此对于大数,它将失败(并且您将无法跟踪它(。
strtol
和朋友,当你超过范围时,会失败(并让你知道(。
然而,您可以构建自己的功能,同样没有溢出保护:
#include <ctype.h>
#include <stdlib.h>
int stringToInt(char *str) {
int num = 0;
size_t start = (*str == '-') ? 1 : 0; // handle negative numbers
for (size_t i = start; str[i] != ' '; i++) {
if (isdigit((unsigned char)str[i]) == 0) { // we have a non-digit
exit(1); // ideally you should set errno to EINVAL and return or terminate
}
num = (num * 10) + (str[i] - '0');
}
return (start) ? -num : num;
}