我在C ++中进行以下任务。我有一系列字符
char myyear[4] = { dob[0], dob[1], dob[2], dob[3] };
char mymonth[2] = {dob[4], dob[5]};
char mydate[2] = { dob[6], dob[7] };
我写道:
cout<<myyear<<"-"<<mymonth<<"-"<<mydate<<"-"<<endl;
我得到了输出
1981╕■#-051981╕■#-02051981╕■#
而不是
1981-05-02
这是dob包含的内容。
任何帮助。
答案 0 :(得分:2)
您需要在每个字符数组的末尾包含 null终结符。
例如,
char myyear[5] = { dob[0], dob[1], dob[2], dob[3], 0 };
cout
(以及C和C ++中的许多其他字符串类型函数)要求将字符串建模为以0结尾的字符序列。
目前你正在做的是,技术上,未定义的行为:你得到任何输出的事实被认为是非常巧合。
顺便问一下,为什么要像这样建模数值? std::cout
也适用于整数类型:例如int myyear = 1981; cout << myyear;
完全有效。
答案 1 :(得分:1)
可能你最后需要\0
(空终止)。
char myyear[5] = { dob[0], dob[1], dob[2], dob[3], '\0' };
char mymonth[3] = {dob[4], dob[5], '\0'};
char mydate[3] = { dob[6], dob[7], '\0'};
答案 2 :(得分:0)
您需要null终止每个数组。见character sequences
const char NULL_TERMINATOR = '\0';
char myyear[5] = { dob[0], dob[1], dob[2], dob[3], NULL_TERMINATOR };
char mymonth[3] = {dob[4], dob[5], NULL_TERMINATOR };
char mydate[3] = { dob[6], dob[7], NULL_TERMINATOR };