部分C庫函數重寫以及反彙編分析之 toupper()

/*//////////////////////////////////////////////////////////////////////////////////// toupper()將字符串中小寫字母全部轉爲大寫////////////////////////////////////////////////////////////////////////////////////*/#include "stdafx.h"char *ptoupper(char *s);int main(int argc, char* argv[]){//char *p="aBCdE";char p[]="aBCdE";printf("%s\n",p);printf("%s\n",ptoupper(p));return 0;}char *ptoupper(char *s){for (char *t=s;*t!='\0';t++){if (*t>='a'&&*t<='z'){*t-='a'-'A';}}return s;}在寫測試代碼的時候,用的是char *p="aBCdE";結果編譯連接通過,但是運行出錯。小甲魚大哥解說“因爲*p = "aBCdE"; 字符串在常量中,不允許被改變的。數組不同,數組存放的位置是在棧中,是變量。”,於是親自反彙編調試了一下,數組中各元素得存放確實是在棧中,當作變量,通過[ebp-XXX]來尋址。頓時豁然開朗啊。。非常感謝甲魚大哥的指點。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章