簡體   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