
[英]passing an array of structs to a function and changing it through the fucntion
[英]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.