数组(二)

本文主要介绍了C++中char数组的相关操作。包括char数组的定义,如使用字符列表或速记形式。还提及使用cin输入字符串的弊病,可通过cin.get()函数解决。此外,讲解了strcpy()和strncpy()函数,前者复制字符串可能覆盖缓冲区,后者可指定最大复制字符数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

char 数组

ExpandedBlockStart.gifContractedBlock.gifchar Greeting[] = dot.gif{'H''e''l''l''o'' ''W''o''r''l''d''\0'};
None.gif
// 速记形式:
None.gif
char Greeting[] = "Hello World";

例子:填充数组

None.gif#include <iostream>
None.gif
using namespace std;
None.gif
None.gif
int main(int argc, char *argv[])
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    
char buffer[80];
InBlock.gif    cout 
<< "Enter the string:\n";
InBlock.gif    cin 
>> buffer;
InBlock.gif    cout 
<< "Here is the string: " << buffer << endl;
InBlock.gif     
InBlock.gif    
return 0;
ExpandedBlockEnd.gif}

上面的代码使用 cin 来输入字符串。cin 的语法要求在字符串完成后往缓冲区里送入一个结束用的 null 字符。这个办法有几个弊病:

1,如果用户输入字符数多于 79, 则会写过缓冲区的结尾。
2,加入输入空格,cin 把它看作字符串的结束,并停止写入缓冲区。


为了解决此问题,可以使用 cin.get() 函数。参数如下:

。要填写的缓冲区
。要取回的最多字符个数
。结束输入的分隔符

默认的分隔符是换行符。 例子:

None.gif#include <iostream>
None.gif
using namespace std;
None.gif
None.gif
int main(int argc, char *argv[])
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    
char buffer[80];
InBlock.gif    cout 
<< "Enter the string: \n";
InBlock.gif    
// 最多取 79 个字符输入
InBlock.gif
    cin.get(buffer, 79);
InBlock.gif    
// 如果用 ',' 作为结束符,这样做:
InBlock.gif    
//cin.get(buffer, 79, ',');
InBlock.gif
    cout << "Here's the buffer: " << buffer << endl;
InBlock.gif     
InBlock.gif    
return 0;
ExpandedBlockEnd.gif}

strcpy() 和 strncpy() 函数

strcpy() 复制整个字符串内容到制定的缓冲区, 如果实际字符串长度比缓冲区的要长,则会覆盖缓冲区尾部的内容。

None.gif#include <iostream>
None.gif
using namespace std;
None.gif
None.gif
int main(int argc, char *argv[])
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    
char String1[] = "No man is an island";
InBlock.gif    
char String2[80];
InBlock.gif
InBlock.gif    strcpy(String2, String1);
InBlock.gif
InBlock.gif    cout 
<< "String1: " << String1 << endl;
InBlock.gif    cout 
<< "String2: " << String2 << endl;   
InBlock.gif     
InBlock.gif    
return 0;
ExpandedBlockEnd.gif}

None.gif

为了防止这种可能性,可以使用 strncpy 函数。
strncpy() 同时指定复制的最大字符个数。

None.gif#include <iostream>
None.gif
using namespace std;
None.gif
None.gif
int main(int argc, char *argv[])
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    
const int MaxLength = 80;
InBlock.gif    
char String1[] = "No man is an island";
InBlock.gif    
char String2[MaxLength + 1];
InBlock.gif
InBlock.gif    strncpy(String2, String1, MaxLength);
InBlock.gif
InBlock.gif    cout 
<< "String1: " << String1 << endl;
InBlock.gif    cout 
<< "String2: " << String2 << endl;
InBlock.gif     
InBlock.gif    
return 0;
ExpandedBlockEnd.gif}

None.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值