0

Visual Studio 2010 で php の拡​​張機能を作成したいのですが、C++ の初心者です。
C++ での私の最後の関数は次のとおりです。

PHP_FUNCTION(DoubleUp){
    char* text;
    int len;
    char string[255];
    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &text) == FAILURE) {
        RETURN_STRING("Invalid Parameters",true);
    } 
      len = sprintf(string,"echo 'hello %.78s'", text);
      RETURN_STRINGL(string,len, 1);
}

そしてphpで私は使用します:

echo DoubleUp('sss');

しかし、出力は次のとおりです。それは次のecho 'hello Ыõ'
ようになります。echo 'hello sss'
引数は非常に長い文字列です。
今、私は何をすべきかわかりません。ありがとう ...

4

1 に答える 1

2

コードの問題は、「型指定子」( の 3 番目のパラメーター) で指定した場合に をzend_parse_parameters返すことです。zval"z"zend_parse_parameters

正しい文字列を取得するには、「s」を使用して文字列を直接取得できます。

if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &text, &len) == FAILURE) {

その場合、文字列の へのポインタと、文字列の長さを保持するためchar*の へのポインタを指定する必要があります。int

zval2 番目の解決策は、を正しく使用して、 から文字列を取得することzvalです。

zval* text;
int len;
char string[255]      
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &text) == FAILURE) { 
    /* ... */ 
}

// cast the value to string
convert_to_string(text);

// get the string value with the Z_STRVAL_P macro (Z_STRLEN_P for the length)
len = sprintf(string,"echo 'hello %.78s'", Z_STRVAL_P(text));
于 2012-09-05T12:56:10.907 に答える