C ++'php_sprintf'如何返回此值?

时间:2012-12-05 02:06:49

标签: php c++ printf

void PrintMACaddress(unsigned char MACData[]){
    php_sprintf("MAC Address: %02X-%02X-%02X-%02X-%02X-%02X\n", 
        MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]);
}

输出代码为:

return PrintMACaddress(MACData);

当我点击“构建”时,会显示以下错误:

错误C2664:'php_sprintf':无法将参数2从'unsigned char'转换为'const char * '

请帮助,我是c ++的新手,我已经搜索了很多天这个错误。

2 个答案:

答案 0 :(得分:1)

我假设php_sprintf指的是为PHP编写扩展时使用的内部PHP函数。然后它具有与C函数sprintf相同的参数。

您是否尝试将MAC地址打印到标准输出或字符串?

如果要打印到标准输出(以及随后打印到控制台),请使用php_printf。 所以你的代码看起来像:

void PrintMACaddress(unsigned char MACData[]){
    php_printf("MAC Address: %02X-%02X-%02X-%02X-%02X-%02X\n", 
        MACData[0], MACData[1], MACData[2], MACData[3], MACData[4], MACData[5]);
}

如果要返回值而不是将其打印到输出中,则需要注意几点:

  • 在C ++中使用字符串时,可以将其表示为char *std::string
  • 使用std::string是C ++的方法。
  • 使用char *更多C - ish风格。您必须自己管理内存阵列(在堆栈上分配或使用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-%02X\n", 
        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-%02X\n", 
        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

更新了答案的第二部分

答案 1 :(得分:0)

据我所知,第二个参数不能是你设置的unsigned char MACData[];正如提到的错误。如果它必须是unsigned char,请使用(const char *)将其转换为常量字符。

void PrintMACaddress(unsigned char MACData[]){
    php_sprintf("MAC Address: %02X-%02X-%02X-%02X-%02X-%02X\n", 
        (const char *)MACData[0], (const char *)MACData[1], (const char *)MACData[2], (const char *)MACData[3], (const char *)MACData[4], (const char *)MACData[5]);
}