繁体   English   中英

初始化const char *数组

[英]Initialize a const char* Array

我正在C ++ 17项目中工作,但必须使用C-legacy-library。 为此,我必须创建一个C风格的const char *数组,但是我在初始化时遇到了麻烦。 尤其是,

#include <iostream>

int main(int argc, char* argv[])
{
    const int bound = 3;

    const char* inames[bound]{ "" };
    for(unsigned int i = 0; i < bound; i++) {
        const char *number = std::to_string(i).c_str();
        inames[i] = number;
    }

    for(unsigned int i = 0; i < bound; i++) {
        std::cout << "inames["
                  << std::to_string(i)
                  << "] = "
                  << inames[i]
                  << std::endl;
    }

    return 0;
}

退货

inames[0] = 2
inames[1] = 2
inames[2] = 2

作为输出,我并不理解。 我期望输出是

inames[0] = 0
inames[1] = 1
inames[2] = 2

谁能帮我指出我的错误吗?

您的代码具有未定义的行为

std::to_string(i).c_str()

您正在创建一个临时的std::string实例,然后获取其内部的const char*指针。 在该行的末尾,临时实例已死,因此指针现在悬空了。

问题是您没有任何地方可以实际存储字符串本身,只有指向它们的指针。

通过这种方式,字符串被纯C数组引用时存储在std :: strings中:

const int bound = 3;
std::vector<std::string> strings(bound);
const char* inames[bound];
for (unsigned int i = 0; i < bound; i++) {
    strings[i] =  std::to_string(i);
    inames[i] = strings[i].c_str();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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