C++ 字符串与字符数组

在C++中,字符串可以通过字符数组(character array)或者std::string类来表示。字符数组是一个字符的集合,以空字符('\0')结尾,这是C风格字符串的特性。

①字符数组未正确终止

char ch[5] = { '1','2','3','4','5' }; // 打印会出现乱码 

这里,ch数组包含了5个字符,但没有空字符('\0')来终止字符串。因此,当cout尝试打印这个数组时,它会继续读取内存直到遇到一个空字符,这可能导致打印出乱码或者程序崩溃(如果读取到了不可访问的内存)。

②字符数组正确终止

char ch2[6] = { '1','2','3','4','5' }; // 实际上是 {'1','2','3','4','5','\0'}(自动填充) 

在C++中,当字符数组的初始化列表中的字符数量少于数组大小时,剩余的位置会被自动填充为空字符('\0')。因此,ch2实际上是一个正确终止的字符串。当使用cout打印时,它会在到'\0'时停止。

③输入与输出

cout << ch; // 输出可能乱码,因为ch没有正确终止

 对于输出,无论是cout还是printf,它们都会在遇到'\0'时停止打印。如果字符串没有正确终止,它们可能会继续读取内存直到遇到'\0'或者发生错误。

④使用cin.getline读取字符串

const int len = 128;

char str[len]{};

// cin.getline(str, len); // 以回车作为字符串的结束符

cin.getline(str, len,'#'); // 也可以指定'#'作为结束符

cout << str << endl;

这里,cin.getline函数用于从标准输入读取一行字符串,直到达到指定的长度(len)或者遇到指定的结束符(在这个例子中是'#')。读取的字符串会被存储在str数组中,并自动以'\0'终止。

总结

  • 字符数组必须以空字符('\0')终止,否则可能会导致未定义行为。
  • 在C++中,当字符数组的初始化列表中的字符数量少于数组大小时,剩余的位置会被自动填充为空字符。
  • coutprintf在打印字符串时,会在遇到'\0'时停止。
  • cin.getline函数可以用于从标准输入读取一行字符串,直到达到指定的长度或者遇到指定的结束符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值