数组(二)

char 数组

char Greeting[] = {'H''e''l''l''o'' ''W''o''r''l''d''\0'};
// 速记形式:
char Greeting[] = "Hello World";

例子:填充数组

#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    
char buffer[80];
    cout 
<< "Enter the string:\n";
    cin 
>> buffer;
    cout 
<< "Here is the string: " << buffer << endl;
     
    
return 0;
}

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

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


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

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

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

#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    
char buffer[80];
    cout 
<< "Enter the string: \n";
    
// 最多取 79 个字符输入
    cin.get(buffer, 79);
    
// 如果用 ',' 作为结束符,这样做:
    
//cin.get(buffer, 79, ',');
    cout << "Here's the buffer: " << buffer << endl;
     
    
return 0;
}

strcpy() 和 strncpy() 函数

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

#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    
char String1[] = "No man is an island";
    
char String2[80];

    strcpy(String2, String1);

    cout 
<< "String1: " << String1 << endl;
    cout 
<< "String2: " << String2 << endl;   
     
    
return 0;
}


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

#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    
const int MaxLength = 80;
    
char String1[] = "No man is an island";
    
char String2[MaxLength + 1];

    strncpy(String2, String1, MaxLength);

    cout 
<< "String1: " << String1 << endl;
    cout 
<< "String2: " << String2 << endl;
     
    
return 0;
}

posted on 2005-04-27 10:24  NeilChen  阅读(509)  评论(0编辑  收藏  举报

导航