读书人

书本上的有关问题

发布时间: 2013-09-06 10:17:17 作者: rapoo

书本上的问题
我在书上看。直接包含#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的,移植时可以少一些工作量。

读书人网 >C++

热点推荐