5

我开始学习字符串和字符串函数(从一本书中),我学习了像strcpyand strcatstrncat..etc这样的函数

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

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

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

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

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

4

4 回答 4

4

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

话虽如此,<cstring>您在项目中使用的其他一些标头可能已包含#included。但是,最好不要依赖其他头文件,包括<cstring>(没有人保证它们总是会为每个编译器做),并在适当的地方包含它。

于 2012-08-05T18:52:39.513 回答
4

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

但是请注意,您正在谈论的函数 ( strcpy, strcat, strncat) 是 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
于 2012-08-05T18:54:21.940 回答
3

那只是意味着它<cstring>包含在<iostream>. 当您包含时,您也通过它<iostream>隐式包含。<cstring>

请注意,通常不保证<cstring>包含在<iostream>. 您很幸运,您的特定实现恰好包含该内容。在不同的实现中可能并非如此。

于 2012-08-05T18:56:00.630 回答
2

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

于 2012-08-05T18:53:37.880 回答