C++ 'php_sprintf'如何返回此值?
C++ 'php_sprintf' HOW to return this value?
void PrintMACaddress(unsigned char MACData[]){
php_sprintf("MAC Address: %02X-%02X-%02X-%02X-%02X-%02Xn",
MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]);
}
输出代码为:
return PrintMACaddress(MACData);
当我点击"构建"时,它会显示以下错误:
错误C2664:"php_sprintf":无法将参数2从"unsigned char"转换为"const char*">
请帮忙,我是c++的新手,我已经搜索了很多天这个错误了。
我假设php_sprintf
指的是为PHP编写扩展时使用的内部PHP函数。然后它具有与C
函数sprintf
相同的参数。
您是想将MAC地址打印到标准输出还是字符串?
如果要打印到标准输出(然后打印到控制台),请使用php_printf
。所以你的代码可以看起来像:
void PrintMACaddress(unsigned char MACData[]){
php_printf("MAC Address: %02X-%02X-%02X-%02X-%02X-%02Xn",
MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]);
}
如果你想返回值而不是将其打印到输出,有几点需要注意:
- 在C++中使用字符串时,可以将其表示为
char *
或std::string
- 使用
std::string
是C++的发展方向 - 使用
char *
更像是C
风格。您必须自己管理内存阵列(在堆栈上分配或使用new []
和delete []
)
如果我使用std::string
:重写方法
std::string PrintMACaddress(unsigned char MACData[]){
char tmp_[32]; // The output string should be always 32 bytes long
php_sprintf(tmp_,"MAC Address: %02X-%02X-%02X-%02X-%02X-%02Xn",
MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]);
return std::string(tmp_);
}
如果您想(或必须)使用char *
:
char *PrintMACaddress(char *MACString, unsigned char MACData[]){
php_sprintf(MACString,"MAC Address: %02X-%02X-%02X-%02X-%02X-%02Xn",
MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]);
return MACString;
}
在这里,该方法获得一个新的参数-指向已分配的至少32字节数组的指针。然后返回指向该数组的指针。你会像这样使用它:
char macString[44];
PrintMACaddress(macString, MACData);
/* Use the string stored in macString */
或
char* macString = new char[44];
PrintMACaddress(macString, MACData);
/* Use the string stored in macString */
delete [] macString;
编辑:用php_sprintf 更新了答案的第二部分
据我所知,第二个参数不可能是unsigned char MACData[]
,您将其设置为;正如所提到的错误。如果它必须是unsigned char
,请使用(const char *)
将其转换为常量字符。
void PrintMACaddress(unsigned char MACData[]){
php_sprintf("MAC Address: %02X-%02X-%02X-%02X-%02X-%02Xn",
(const char *)MACData[0], (const char *)MACData[1], (const char *)MACData[2], (const char *)MACData[3], (const char *)MACData[4], (const char *)MACData[5]);
}
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- QueryWorkingSet总是返回false
- (C++)分析树以计算返回错误值的简单算术表达式
- 访问者访问变体并返回不同类型时出错
- 如何返回一个类的两个对象相加的结果
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- lower_bound()返回最后一个元素
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何取消对nullptr的屏蔽,返回正确的对象
- 为什么PHP Mcrypt会返回邮件垃圾
- 如何在php扩展中返回$this
- PHP扩展方法没有返回原因
- PHP扩展如何从方法返回字符串
- PHP socket_recv像C++一样返回 char*