C++:没有字符串<cstring>函数
C++: String Functions without <cstring>
我开始学习字符串和字符串函数(从一本书中),我学会了像strcpy
和strcat
和strncat
这样的函数。等
所以我开始练习在简单的程序中使用它们,以了解它们的作用。
后来我很惊讶,在书中它告诉我必须使用#include <cstring>
才能使用所有这些字符串函数。
我不止一次尝试使用字符串函数而不包括<cstring>
为什么呢?
我包含的唯一头文件是<iostream>
,但我能够使用字符串函数。
请有人向我解释为什么字符串函数在没有<cstring>
的情况下工作,我是否需要包含它才能使用字符串函数,如果没有,<cstring>
有什么用;
首先,您绝对需要考虑切换到 std::string
.手动内存分配虽然是一项有趣且有时具有挑战性的任务,但不应成为日常工作的一部分。
话虽如此,可能<cstring>
是由您在项目中使用的其他标头 #included 的。但是,最好不要依赖包括<cstring>
在内的其他标头(没有人保证它们将始终为每个编译器执行此操作),并在适当的情况下包含它。
这仅仅意味着<cstring>
包含在<iostream>
中。当你包含<iostream>
时,你也隐式地包含了<cstring>
通过它。
请注意,通常不能保证<cstring>
包含在 <iostream>
中。你只是很幸运,你的具体实现恰好有这种包含。在不同的实现中,情况可能并非如此。
您不需要包含<cstring>
,因为它包含在 iostream
中。
但是请注意,您正在谈论的函数(strcpy
,strcat
,strncat
)是C char *
函数,并且C++等价物与更方便的std::string
一起工作。
strcpy
: std::string::operator=
std::string str2;
std::string str1 = str2; // copy str2 in str1
strcat
: std::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。
- 在C++中使用Cstring反转字符串
- EASTL矢量<向量<int>>连续的
- 如何转换真实路径 CString c++
- __int64 CString 返回错误的值 - C++ MFC
- 如何将 SHFileOperation() 与 CString 路径一起使用
- 在_T值中使用 CString
- 没有大小参数的CString::GetBuffer()做什么
- 如何将 CString 转换为字节 [] 数组?
- 可视化 如何将 CString 值列表添加到 MFC C++ 中的组合框中?
- C++从 std::string 创建 CString 失败
- 对树节点使用 CString 时出现内存泄漏
- C++ 巨大 CString 的串联
- 无法从字符构造CString
- 将旧 cstring 的标记连接成新的 C 字符串
- 如何将 CComVariant bstr 转换为 CString
- C++ cstring 查找和替换
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 使用_tcscpy_s将 CString 复制到 TCHAR*
- StringCch* functions and Cstring
- 循环以使用 cstring 数组 c++ 获取用户输入