![](/img/trans.png)
[英]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.