我陷入了一个有趣的问题。当我第一次调用string_to_int时,stack为大小为6创建了一个内存缓冲区,并转换为正确的整数。但是在第二次调用IMO时,堆栈重用缓冲区(因为小于6?),我仍然在断点处看到内容" 513"
,因此atoi
转换为56513瞬间56。
我应该如何正确快速地将数组转换为int?我无法使用strtoi
或stoi
,因为数组有时只能按空格填充。我不能直接将数组传递给atoi
,因为例如,数组(来自网络的字符串流)可以是“123456”但它实际上包含2个单独的值“123”和“456”
static int string_to_int(const char* number, int size)
{
char stackbuf[size];
memcpy(stackbuf, number, size);
return atoi(stackbuf);
}
char* ptr1 = " 513"
string_to_int(ptr1, 6); //result = 513
char* ptr2 = "056"
string_to_int(ptr2, 3); //result = 56513
答案 0 :(得分:3)
您需要nul
的{{1}}终止符才能正常工作,请尝试atoi
代替strcpy()
或复制memcpy()
字节。
答案 1 :(得分:2)
正如iharob所指出的那样,问题是在你的第二种情况下,你没有一个以空终止的字符串供atoi使用。
static int string_to_int(const char* number, int size)
{
char stackbuf[size+1];
memcpy(stackbuf, number, size);
stackbuf[size] = '\0'; //or you could use strncpy
return atoi(stackbuf);
}