我开始学习字符串和字符串函数(来自一本书),我学习了strcpy
和strcat
以及strncat
等函数。等等
所以我开始在简单的程序中练习使用它们来了解它们的作用。
后来我很惊讶在书中它告诉我必须使用#include <cstring>
来使用所有这些字符串函数。
我已尝试多次使用字符串函数而不包括<cstring>
,为什么?
我包含的唯一头文件是<iostream>
,但我能够使用字符串函数。
请有人向我解释为什么字符串函数在没有<cstring>
的情况下工作,我是否需要包含它以使用字符串函数,如果没有<cstring>
的用途,那么
答案 0 :(得分:4)
首先,您绝对需要考虑切换到std::string
。手动内存分配虽然是一项有趣且有时具有挑战性的任务,但不应成为您日常工作的一部分。
话虽如此,可能<cstring>
被你在项目中使用的其他标题所包含#included。但是最好不要依赖包括<cstring>
在内的其他标题(没有人保证它们会一直为每个编译器做,并且在适当的时候包含它)。
答案 1 :(得分:4)
您无需加载<cstring>
,因为iostream
包含了strcpy
。
但是请注意,您正在讨论的功能(strcat
,strncat
,char *
)是C函数,需要std::string
并使其C ++等效工作更方便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
:
{{1}}
答案 2 :(得分:3)
这只是意味着<cstring>
包含<iostream>
。当您加入<iostream>
时,您还隐含地通过它<cstring>
。
请注意,通常不保证<cstring>
包含<iostream>
。你很幸运,你的具体实施恰好包含了这个内容。在可能不是这种情况的不同实现中。
答案 3 :(得分:2)
很可能,您的c ++标准库版本实现了带有c标准库函数的iostream的一些功能,这些函数位于cstring中。因此,当您包含iostream头文件时,这将有一个#include
指令,为您提供cstring。