我是靠谱客的博主 美丽抽屉,最近开发中收集的这篇文章主要介绍第一章:变量与基本类型1.3 C风格字符串,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.3 C风格字符串

简介

C风格字符串不是一种类型,而是为了表达和使用字符串而形成的一种约定俗成的写法:将字符串存放在字符数组中并以空字符结束。一般利用指针来操作这些字符串。

Tips:尽管C++支持C风格字符串,但是在C++程序中最好还是不要使用它们。这是因为C风格字符串不仅使用起来不太方便,而且极其容易引发系统漏洞。

C风格字符串标准库函数

Tips:下表中列举的函数不负责验证其字符串参数,用户自己必须保证传入此类函数的指针必须指向以空字符作为结束的字符数组。

下表列举了C语言标准库提供的一组函数,它们定义在cstring头文件中,可用于操作C风格字符串。

函数功能
strlen§返回p的长度,空字符不算在内
strcmp(p1, p2)比较p1和p2的相等性:相等返回0;p1>p2返回正值;p1<p2返回负值
strcat(p1, p2)将p2附加到p1之后, 返回p1
strcpy(p1, p2)将p2拷贝给p1,返回p1

举个例子,如果我们要连接两个C风格字符串,传统的方法是使用strcat()函数和strcpy()函数,但是这种做法极容易引发严重错误:

#include <iostream>
#include <cstring>
int main() {
const char str1[] = "tomo";
const char str2[] = "cat";
// 如果我们计算错了outputStr的大小将引发严重错误:
char outputStr[8];
std::strcpy(outputStr, str1);
std::strcat(outputStr, str2);
std::cout << outputStr << std::endl;
}

有一种简单的方法是将其中一个C风格字符串转化为string,就可以直接使用string类型的+号运算符:

#include <iostream>
#include <string>
int main() {
const char str1[] = "tomo";
const char str2[] = "cat";
std::string outputStr = std::string(str1) + str2;
std::cout << outputStr << std::endl;
}

兼容旧代码中的C风格字符串

尽管我们不推荐使用C风格字符串,但是现代C++程序不得不与那些充满了C风格字符串的旧代码衔接,因此C++提供了对应的一组功能。

1. C风格字符串初始化string对象或为string对象赋值

const char ca[] = "tomocat";
std::string str1 = ca;

2. string加法运算中允许使用C风格字符串

在string对象的加法运算中允许使用C风格字符串作为其中的一个运算对象(不能两个运算对象都是C风格字符串)。

const char ca[] = "tomo";
std::string str = "cat";
std::string outputStr = ca + str;

3. string可以转换为C风格字符串

Tips:我们无法保证c_str()函数返回的字符数组一直有效,如果后续的操作改变了string的值就可能让之前返回的数组失效。如果执行完c_str()函数后程序想一直都能使用返回的数组,最好将该数组重新拷贝一份。

可以使用c_str()成员函数将string对象转换为C风格字符串。

最后

以上就是美丽抽屉为你收集整理的第一章:变量与基本类型1.3 C风格字符串的全部内容,希望文章能够帮你解决第一章:变量与基本类型1.3 C风格字符串所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部