繁体   English   中英

即使通过 function 后值也没有改变

[英]Value not changing even after passing it through a function

如何让 function 中的值也显示在主 function 中? 我尝试执行以下操作,但 output_size 始终为 0 而不是 64

void convert_to_gibberish(const char * input, const unsigned int input_size, char** output, unsigned int * output_size){ 

 

// do some encryption 

 

DWORD gibberish_text_size = 64; // Constant value obtained from encryption functions 

output_size = (unsigned int *)gibberish_text_size ; 

 

} 

 

int main(){ 

char * test = "test" 

char * output = NULL; 

unsigned int output_size = 0; 

convert_to_gibberish(test,strlen(test),&output, &output_size); 

cout << "Output size:" << output_size << endl; 

}

您正在使用 C++,就好像它是 C。

停止使用char* ,它是const char* ,甚至停止使用它并使用std::string

停止使用(双)指针**通过引用传递,使用&代替实际引用。

使用nullptr而不是NULL

您的代码的问题在于您没有取消引用指针来为其分配值,而是为它分配了一个(错误的)地址。 这样做:

*output_size = gibberish_text_size; 

现代化你的代码:

void convert_to_gibberish(const std::string& input, 
const unsigned int input_size, std::string& output, unsigned int& output_size)
{ 

    // do some encryption 


    DWORD gibberish_text_size = 64; // Constant value obtained from  encryption functions 

    output_size = gibberish_text_size ; 
} 

int main(){ 

    std::string test = "test" 

    std::string output;

    unsigned int output_size = 0; 

    convert_to_gibberish(test, test.length(), output, output_size); 

    cout << "Output size:" << output_size << endl; 

}

使您的 function 返回一个int而不是void并以return output_size; .

然后在main()中你可以这样做:

cout << "Output size:" << convert_to_gibberish(test,strlen(test),&output, &output_size) << endl; 

你犯了 2 个错误。 错误是这一行

output_size = (unsigned int *)gibberish_text_size;

您转换的第一个 DWORD 是unsigned int而不是unsigned int * ,因此转换不是您所期望的。 第二个错误是将指针分配给 function 中的 scope 中的变量。这导致指针指向 scope 之外的变量,因此您可能会出现崩溃或错误结果。

执行您想执行的操作的正确语法如下:

void convert_to_gibberish(const char * input, const unsigned int input_size, char** output, unsigned int * output_size){ 

 

// do some encryption 

 

DWORD gibberish_text_size = 64; // Constant value obtained from encryption functions 

*output_size = gibberish_text_size ; 

 

} 

 

int main(){ 

char * test = "test" 

char * output = NULL; 

unsigned int output_size = 0; 

convert_to_gibberish(test,strlen(test),&output, &output_size); 

cout << "Output size:" << output_size << endl; 

}

但是当你使用 C++ 时这不是最好的方法......你可以用这种方式使用引用&而不是指针:

void convert_to_gibberish(const char  *input, const unsigned int input_size, char* &output, unsigned int  &output_size){ 

 

// do some encryption 

 

DWORD gibberish_text_size = 64; // Constant value obtained from encryption functions 

output_size = gibberish_text_size ; 

 

} 

 

int main(){ 

char * test = "test" 

char * output = NULL; 

unsigned int output_size = 0; 

convert_to_gibberish(test,strlen(test),output, output_size); 

cout << "Output size:" << output_size << endl; 

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM