Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将字符串的值存储到char数组中_C++_Arrays_String_Uint8t - Fatal编程技术网

C++ 将字符串的值存储到char数组中

C++ 将字符串的值存储到char数组中,c++,arrays,string,uint8t,C++,Arrays,String,Uint8t,我试图创建一个大整数类,但遇到了一个问题。我有一个重载构造函数,它给了我一些问题。它应该接收一个字符串并将该字符串转换为一个名为m\u number的std::uint8\u t*,跟踪位数,并跟踪为每个std::uint8\u t*分配的空间。数字向后加载,最低有效位为m\u编号[0]。我遇到的问题是将“0”存储到数组中。该函数对于任何其他值都可以正常工作,但如果字符串中有“0”,则该函数将停止将值存储到std::uint\u 8*中。 以下是我的类定义: class BigInt

我试图创建一个大整数类,但遇到了一个问题。我有一个重载构造函数,它给了我一些问题。它应该接收一个字符串并将该字符串转换为一个名为
m\u number
std::uint8\u t*
,跟踪位数,并跟踪为每个
std::uint8\u t*
分配的空间。数字向后加载,最低有效位为
m\u编号[0]
。我遇到的问题是将“0”存储到数组中。该函数对于任何其他值都可以正常工作,但如果字符串中有“0”,则该函数将停止将值存储到
std::uint\u 8*
中。 以下是我的类定义:

      class BigInteger
    {
    public:
        BigInteger add(const BigInteger& rhs);
        BigInteger multiply(const BigInteger& rhs);
        void display();
        BigInteger();
        BigInteger(const BigInteger& rOther);
        BigInteger(int);
        BigInteger(std::string);
        BigInteger& operator=(const BigInteger & rhs);

    private:
        std::uint8_t* m_number;
        unsigned int m_sizeReserved;
        unsigned int m_digitCount;
}
这是我的重载构造函数:

BigInteger::BigInteger(std::string str) {
    m_digitCount = str.length();
    m_sizeReserved = m_digitCount;
    m_number = new std::uint8_t[m_sizeReserved];
    std::uint8_t* aArray = new std::uint8_t[m_sizeReserved];
    int j = str.length()-1;
    for(int i=0; i < m_digitCount; i++, j--) {
            aArray[i] = str[j]-'0';
    }
    for(int i=0; i < m_digitCount; i++) {
        m_number[i] = aArray[i];
    }
    delete[] aArray;

}
biginger::biginger(std::string str){
m_digitCount=str.length();
m_sizeReserved=m_digitCount;
m_编号=新标准::uint8_t[m_尺寸服务];
std::uint8_t*aArray=新std::uint8_t[m_sizeReserved];
int j=str.length()-1;
对于(int i=0;i
问题在于uint8\u t被视为无符号字符。

因此,如果您通过cout传递它,它会将您的0解释为ASCII的索引,即“\0”并停止。 因此,您必须确保cout不会将整数信息解释为字符信息

有关解决方案和更多信息,请参见此:

请提供一份详细的报告。顺便说一句,您有两个
new
,但只有一个
delete
闻起来像内存泄漏“函数停止存储值”您确定吗?在我看来,当读取字符串而不是存储它时,会出现问题。您可以使用
std::vector
来保持大小,而不是读取nul并假设它将以字符串大小终止。使用
std::vector
可以简化操作。总体思路似乎很合理。我想您也可以等到读取字符串后再转换,即,
aArray[I]=str[j]-'0'->
aArray[i]=str[j]
&然后类似于(int i=0;m_number[i]!=0;++i)std::cout的
问题并不是由std::cout引起的,因为我从未实际输出值,存储值是个问题如果不使用任何输出,您如何知道有问题?在哪一行代码中可以检测到它没有存储值?