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

时间:2012-08-05 18:49:30

标签: c++ string header-files

我开始学习字符串和字符串函数(来自一本书),我学习了strcpystrcat以及strncat等函数。等等

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

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

我已尝试多次使用字符串函数而不包括<cstring>,为什么?

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

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

4 个答案:

答案 0 :(得分:4)

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

话虽如此,可能<cstring>被你在项目中使用的其他标题所包含#included。但是最好不要依赖包括<cstring>在内的其他标题(没有人保证它们会一直为每个编译器做,并且在适当的时候包含它)。

答案 1 :(得分:4)

您无需加载<cstring>,因为iostream包含了strcpy

但是请注意,您正在讨论的功能(strcatstrncatchar *)是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。