C++:没有字符串<cstring>函数

C++: String Functions without <cstring>

本文关键字:cstring gt 函数 lt 字符串 C++      更新时间:2023-10-16

我开始学习字符串和字符串函数(从一本书中),我学会了像strcpystrcatstrncat这样的函数。等

所以我开始练习在简单的程序中使用它们,以了解它们的作用。

后来我很惊讶,在书中它告诉我必须使用#include <cstring>才能使用所有这些字符串函数。

我不止一次尝试使用字符串函数而不包括<cstring>为什么呢?

我包含的唯一头文件是<iostream>,但我能够使用字符串函数。

请有人向我解释为什么字符串函数在没有<cstring>的情况下工作,我是否需要包含它才能使用字符串函数,如果没有,<cstring>有什么用;

首先,您绝对需要考虑切换到 std::string .手动内存分配虽然是一项有趣且有时具有挑战性的任务,但不应成为日常工作的一部分。

话虽如此,可能<cstring>是由您在项目中使用的其他标头 #included 的。但是,最好不要依赖包括<cstring>在内的其他标头(没有人保证它们将始终为每个编译器执行此操作),并在适当的情况下包含它。

这仅仅意味着<cstring>包含在<iostream> 中。当你包含<iostream>时,你也隐式地包含了<cstring>通过它。

请注意,通常不能保证<cstring>包含在 <iostream> 中。你只是很幸运,你的具体实现恰好有这种包含。在不同的实现中,情况可能并非如此。

您不需要包含<cstring>,因为它包含在 iostream 中。

但是请注意,您正在谈论的函数(strcpystrcatstrncat)是C char *函数,并且C++等价物与更方便的std::string一起工作。

strcpystd::string::operator=

std::string str2;
std::string str1 = str2; // copy str2 in str1

strcatstd::string::operator+=

str1 += str2; // concat str2 to str1

strncat

str1 += str2.substr(0,n); // concat the first n characters of str2 to str1
很有可能

,您的 c++ 标准库版本使用 c 标准库函数实现了 iostream 的一些功能,这些功能位于 cstring 中。因此,当您包含 iostream 头文件时,这将有一个 #include 指令,为您提供 cstring。