[英]change pointer of char[] in c++
我不得不寫一個聲明char text[16];
的程序char text[16];
和int number;
然后用來自用戶的輸入來填充它。 然后,我必須調用另一個函數(不傳遞任何內容)並從堆棧中調用該數據並顯示它。 我找到了他們兩個
// This is the function that is called without passing any variables
int number;
char text[16];
cout << *(&text + 5) << endl; // This outputs the correct text but I can not figure out how to assign it to text
number = *(int*)(&number + 20); // This works and outputs the correct number and saves correctly to int number;
cout << "\tnumber: "
<< number
<< endl;
cout << "\ttext: "
<< text
<< endl;
我想知道是否可以將文本從*(&text + 5)
為char text[16];
您正在執行的操作將導致未定義的行為。 在很大程度上取決於編譯器,因此也取決於體系結構。 證明是,當我使用不同的優化標志編譯和運行代碼時,會得到不同的結果。 查看https://en.wikipedia.org/wiki/Buffer_overflow
第一個表達式*(&text + 5)
計算結果為獲取內存中文text
指針的地址,將其添加5,然后對其進行解引用以獲得存儲在該位置的字符值。 那時,這幾乎是堆棧上的所有內容。
&number + 20
肯定會離開“可見”堆棧,這是指針運算,將導致您在指向堆棧上number
內存地址的指針上加上20*sizeof(int)
。
如果這是您打算要做的,那么您應該按照@JafferWilson的建議使用strcpy。
通過閱讀Curious對答案的評論,答案是:
沒有適當的方法來讀取C ++中另一個函數中的局部變量,而不將它們(或指向它們的指針或對其的引用)作為參數(或在作為參數傳遞的對象內)傳遞。
您可以分配文件范圍(所謂的全局)變量,並在其他函數中讀取它們。 那幾乎總是一個壞主意。
我覺得您可能來自匯編程序編程背景,甚至嘗試這種事情。 您需要向結構化編程范式多投降。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.