c++中的字符赋值

Character assignment in c++

本文关键字:赋值 字符 c++      更新时间:2023-10-16

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

任何帮助。

您需要在每个字符数组的末尾包含空终止符

例如,

char myyear[5] = { dob[0], dob[1], dob[2], dob[3], 0 };

cout(以及C和c++中的许多其他字符串类型函数)要求将字符串建模为以0结尾的字符序列。

从技术上讲,你现在所做的是未定义的行为:你得到任何输出的事实都被认为是完全巧合的。

顺便说一下,你为什么要这样建模数值?std::cout也适用于整数类型:例如,int myyear = 1981; cout << myyear;是完全有效的

可能您需要在末尾使用 (null termination)。

char myyear[5] = { dob[0], dob[1], dob[2], dob[3], '' };
char mymonth[3] = {dob[4], dob[5], ''};
char mydate[3] = { dob[6], dob[7], ''};

您需要空终止每个数组。参见字符序列

const char NULL_TERMINATOR = '';
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 };