这里有几个问题我不理解。我看到标签是C++/CLI,但我下面所描述的应该与标准C++相同。
无法编译
您提供的代码无法编译;get_error_from_header
没有指定返回类型。在我的实验中,我将返回类型设置为size_t
。
C++ strstr()
的签名
标准C库中strstr()
的签名是:
char *
strstr(const char *s1, const char *s2);
然而,在C++库中,strstr()
函数的签名因重载而异,可能是以下之一:
const char * strstr ( const char * str1, const char * str2 );
char * strstr ( char * str1, const char * str2 );
我会选择第一个重载,因为你不想修改字符串,只需要读取它。因此,你可以将你的代码更改为:
const char* err = strstr((const char *)ptr, "550");
if (err != NULL) {
...
}
另外,我假设您的评论指出了错误:
//error cannot convert const char** to char*
有一个拼写错误:看不到 const char **
。
无需分配给 err
如先前的答案所指出的,如果 err
只用于检查NULL
,则无需使用err
来存储strstr
的结果。因此,您可以使用:
if (strstr((const char *)ptr, "550") != NULL) {
...
}
鼓励使用reinterpret_cast<>
正如另一个回答所指出的,你应该使用reinterpret_cast<>
而不是C风格的转换:
if (strstr(reinterpret_cast<const char *>(ptr), "550") != NULL) {
...
}
使用const_cast<>
去除const
根据问题中的示例,我不认为这是必要的。但如果您有一个需要去除const
的变量,您应该使用const_cast<>
运算符。如下所示:
const char * p1;
char * p2;
p2 = const_cast<char *>(p1);
正如评论中所指出的那样,使用const_cast<>
运算符的原因是为了使作者的意图清晰,并且便于搜索const_cast<>
的用法;通常去除const是错误或设计缺陷的根源。