试图获取字符串到char数组,帮助我获得数组中所需的字符

时间:2017-03-13 15:56:09

标签: c++ arrays string

我正在尝试将字符串转换为char数组;它适用于3个字母,但是一些奇怪的字符可用于更长的字符串。 该脚本工作正常,直到我立刻打印整个数组...

std::string word;
    std::cout<< "enter word: ";
    cin>>word;
    cin.ignore();
    //std::cout<< word ":"<<word.length();
    int len=word.length();
    char char1[len-1];
    cout<<"\n";
    for (int a=0;a<len;a++)
    {
        char1[a]=word.at(a);
        std::cout<<char1[a];
    }

cout<<"\ncheckline: "<<char1;

输入“abcd” 输出是“abcdπ”

1 个答案:

答案 0 :(得分:2)

你有四个问题。

首先,数组的大小必须是编译时常量。 len不是编译时常量,因此程序根据标准不正确。从此以后,我将假设您的编译器支持&#34;可变长度数组&#34;语言扩展。在标准C ++中,如果在运行时确定大小,则必须分配动态内存。

其次,您分配的内存太少,并且溢出缓冲区。如果为len - 1个字符分配内存,则最后一个有效索引为len - 1 - 1。像你一样写char1[len - 1],有未定义的行为。 <{1}}字符需要char1[len]

第三,你没有用null终止字符串。该标准要求插入流中的任何字符串必须以null结尾。但是,即使它不包含空终止字符串,也会将len传递给char1。行为未定义。注意,还必须记住为此空终止字符分配内存:std::cout ... char1[len + 1];

最后,你所尝试的可能毫无意义。重新查看您认为需要执行此操作的原因。我怀疑这些原因是错误的。