[英]Converting Char Array to Integer
我陷入一个有趣的问题。 当我第一次调用string_to_int时,堆栈为大小6创建了一个内存缓冲区,并将其转换为正确的整数。 但是在第二次调用IMO时,堆栈重用了缓冲区(因为小于6?),我仍然在断点处看到内容" 513"
,因此atoi
转换为56513的瞬时值。
我应该如何正确,快速地将数组转换为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
您需要使用nul
终止符才能使atoi
正常工作,请尝试使用strcpy()
而不是memcpy()
或复制size + 1
个字节。
正如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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.