我正在尝试将字符串转换为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π”
答案 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];
。
最后,你所尝试的可能毫无意义。重新查看您认为需要执行此操作的原因。我怀疑这些原因是错误的。