2
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を'unsignedchar'から'constchar*'に変換できませ

助けてください、私はc ++の初心者であり、私はすでにこのエラーを何日も探しています。

4

2 に答える 2

1

これは、php_sprintfPHPの拡張機能を作成するときに使用される内部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]);
}

出力に出力する代わりに値を返したい場合は、注意すべき点がいくつかあります。

  • char *C ++で文字列を操作する場合は、次のいずれかとして表すことができます。std::string
  • 使用std::stringするのがC++の方法です。
  • 使用char *はよりC風変わりなスタイルです。自分でメモリアレイを管理する必要があります(スタックに割り当てるか、andを使用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;
}

ここで、メソッドは1つの新しいパラメーター(少なくとも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で答えの2番目の部分を更新しました

于 2012-12-05T02:57:57.577 に答える
0

私の知る限り、2 番目のパラメーターはunsigned char MACData[]、あなたが設定した にすることはできません。言及されたエラーとして。にする必要がある場合はunsigned char、 を使用(const char *)して定数 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]);
}
于 2012-12-05T02:17:02.490 に答える