繁体   English   中英

将Char数组转换为整数

[英]Converting Char Array to Integer

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

我应该如何正确,快速地将数组转换为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

您需要使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM