c ++中的字符赋值

时间:2014-03-16 07:31:38

标签: c++ char variable-assignment

我在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包含的内容。

任何帮助。

3 个答案:

答案 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 };