数组(二)
char 数组
例子:填充数组
上面的代码使用 cin 来输入字符串。cin 的语法要求在字符串完成后往缓冲区里送入一个结束用的 null 字符。这个办法有几个弊病:
1,如果用户输入字符数多于 79, 则会写过缓冲区的结尾。
2,加入输入空格,cin 把它看作字符串的结束,并停止写入缓冲区。
为了解决此问题,可以使用 cin.get() 函数。参数如下:
。要填写的缓冲区
。要取回的最多字符个数
。结束输入的分隔符
默认的分隔符是换行符。 例子:
strcpy() 和 strncpy() 函数
strcpy() 复制整个字符串内容到制定的缓冲区, 如果实际字符串长度比缓冲区的要长,则会覆盖缓冲区尾部的内容。
为了防止这种可能性,可以使用 strncpy 函数。
strncpy() 同时指定复制的最大字符个数。
char Greeting[] = {'H', 'e', 'l', 'l', 'o', ' ', 'W', 'o', 'r', 'l', 'd', '\0'};
// 速记形式:
char Greeting[] = "Hello World";
// 速记形式:
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;
}
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;
}
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;
}
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;
}
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;
}