C++ 将字符数组转换为整数

C++ 将字符数组转换为整数,c++,c,C++,C,我陷入了一个有趣的问题。当我第一次调用string_to_int时,stack为大小6创建了一个内存缓冲区,并将其转换为正确的整数。但是在第二次调用IMO时,stack重用了缓冲区(因为小于大小6?),我仍然在断点处看到内容“513”,因此atoi转换为56的56513瞬间 如何正确快速地进行数组整型?我不能使用strtoi或stoi,因为数组有时只能用空格填充。我不能直接将数组传递给atoi,因为数组(来自网络的字符流)可以是“123456”,但它实际上包含两个单独的值“123”和“456”

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

如何正确快速地进行数组整型?我不能使用
strtoi
stoi
,因为数组有时只能用空格填充。我不能直接将数组传递给
atoi
,因为数组(来自网络的字符流)可以是“123456”,但它实际上包含两个单独的值“123”和“456”


您需要
num
终止符才能正常工作
atoi
请尝试
strcpy()
而不是
memcpy()
或复制
size+1
字节。

您需要
num
终止符才能正常工作
atoi
请尝试
strcpy()
而不是
memcpy()
或复制
大小+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);
    }

正如iharob所指出的,问题是在第二种情况下,atoi无法处理以null结尾的字符串

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

对此很抱歉(或者如果你更喜欢某种东西,在拉丁字母表中,耶和华以i开头),他也没有第一种情况的终止零(有3个前导空格)。零是因为luckUsing
strncpy()
在这种情况下没有好处。很抱歉(或者如果你喜欢某种东西,在拉丁字母表中,耶和华以i开头),第一种情况下他也没有终止零(有3个前导空格)。在这种情况下,luckUsing
strncpy()
没有提供任何好处。strncpy是一个很好的选择,因为它还可以防止缓冲区溢出overflow@vishal
strncpy()
也有误用的可能,因为它不能确保字符串以
'\0'
结尾。OP在这里遇到了完全相同的问题。感谢您的知识:)strncpy是一个很好的选择,因为它还可以防止缓冲区溢出overflow@vishal
strncpy()
也有误用的可能,因为它不能确保字符串以
'\0'
结尾。同样的问题是在这里。谢谢大家的知识:既然你使用C++,为什么不只用StrueSt流呢?这样你就避免了手动内存管理和遗留C API。既然你使用C++,为什么不使用STRIGSTORD呢?这样可以避免手动内存管理和遗留的C API。