首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

书本上的有关问题

2013-09-06 
书本上的问题我在书上看。直接包含#includecstring然后std::strcpy(p,a)我觉得有点奇怪,于是我自己弄了

书本上的问题
我在书上看。直接包含#include<cstring>  然后std::strcpy(p,a);
我觉得有点奇怪,于是我自己弄了一个简短的程序,结果发现这样是错的,但是如果不用std::反而是对的,这个怎么解释?我就是测试一下有没有错误,所以没有用到iostream。 iostream cstring strcpy 测试
[解决办法]
不知道你用的什么编译器,cstring属于C++标准库,所以cstring一定在std名称空间内,std::strcpy一定是合法的,出现编译错误一定属于非标准行为。除非使用string.h,这个就不能使用std,因为它不属于C++标准库。
[解决办法]
都说了编译器出现了非标准行为,是编译器做了错事。通常的做法,编译器会把C库中的名字通过using引入std名称空间中,例如这样:

//cstring
.........
#include <string.h>
..........
namespace std
{

  using ::memchr;
  using ::memcmp;
  using ::memcpy;
  using ::memmove;
  using ::memset;
  using ::strcat;
  using ::strcmp;
  using ::strcoll;
  using ::strcpy;
  using ::strcspn;
  using ::strerror;
  using ::strlen;
  using ::strncat;
  using ::strncmp;
  using ::strncpy;
  using ::strspn;
  using ::strtok;
  using ::strxfrm;
  using ::strchr;
  using ::strpbrk;
  using ::strrchr;
  using ::strstr;
}
[解决办法]

引用:
他的提示是c:\windows\system32\text.cpp(5) : error C2653: 'std' : is not a class or namespace name


这个错误信息说明cstring中根本没有定义namespace std,结果是一样的,没有把C库的名字引入std。
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

他的提示是c:\windows\system32\text.cpp(5) : error C2653: 'std' : is not a class or namespace name


这个错误信息说明cstring中根本没有定义namespace std,结果是一样的,没有把C库的名字引入std。

恩,那如果以后我自己写代码的时候,你说加还是不加好


习惯上,对于C库的函数名,还是不加的好,因为C标准库是没有std的,移植时可以少一些工作量。

热点排行