将Char数组转换为整数

时间:2015-10-09 03:08:23

标签: c++ c

我陷入了一个有趣的问题。当我第一次调用string_to_int时,stack为大小为6创建了一个内存缓冲区,并转换为正确的整数。但是在第二次调用IMO时,堆栈重用缓冲区(因为小于6?),我仍然在断点处看到内容" 513",因此atoi转换为56513瞬间56。

我应该如何正确快速地将数组转换为int?我无法使用strtoistoi,因为数组有时只能按空格填充。我不能直接将数组传递给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

2 个答案:

答案 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);
    }