1樓:匿名使用者
strcpy的引數解釋(msdn)
char *strcpy(
char *strdestination,
const char *strsource
);strdestination:destination string.
strsource:null-terminated source string.
當宣告:
char strlist[3][5]=;
實際上三個字串strlist[0]到strlist[2],是連續存放的。
當strcpy(strlist[1],"write--");
按"write--"全數拷到了strlist[1]及其後的兩個位元組。
雖然strlist[1]只有5個字元長,但strlist[1]只是代表著字串1的起址。倘若註釋掉隨後的語句,只printf("%s",strlist[1]),可以看到輸出
"write--",因為字串的結束是以遇到'\0'為條件。
當strcpy(strlist[2],"here");
strlist[1]的串結束點為strlist[2]的串結束點。
此時:strlist[1]="writehere\0";
strlist[2]="here\0";
實際上,在vs2005裡,越界的strcpy會被編譯器指示出來,它會提示使用strcpy_s代替。
2樓:匿名使用者
首先,二維陣列的儲存方式也是連續的,char strlist[3][5]=; 在棧中是一塊15位元組的連續空間,相當於char strlist[15],索引的方式是a[m][n] = a[m * n + n](從0開始)。然後,strcpy是從源字串開始向目的複製,直到'\0',strcpy(strlist[1],"write--");把那塊空間的第5到12位元組賦值為"write--0",strcpy(strlist[2],"here");
把第10到14位元組賦值為"here0",這裡將之前的"--"覆蓋掉了,這時陣列strlist的狀態應該是(字元):
00000writehere0
最後,格式%s是輸出到'\0','\0'實際上就是0啦,和空格是不一樣的,那麼strlist[0]從strlist的開頭輸出,就會什麼都不輸出
strlist[1]會從第5個位元組開始輸出,是writeherestrlist[2]會從第10個位元組開始輸出,是here
3樓:神之雷藏
偶然發現這個問題
在vc裡編譯除錯了一下 也被搞迷糊了
執行strcpy(strlist[1],"write--"); 時strlist[1]的值是write--
strlist[2]的值是--
在執行到strcpy(strlist[2],"here"); 時strlist[1]的值是whiteherestrlist[2]的值是here
最後輸出是strlist[0]是不輸出什麼的 所以輸出的是whiteherehere
關鍵就是執行到第二個strcpy的地方,為什麼會影響到strlist[1]的值呢?我會繼續關注這個問題
lz有什麼結果的話 貼出來
看了下面兩位的介紹我明白多了
4樓:匿名使用者
write-- 長度越界了。
陣列指標越界導致堆疊中其他變數內容被改變。strcpy用的時候,目標字串的空間必須大於等於原字串的空間的,不然可能不是你想要的結果。
5樓:匿名使用者
後面的here不應該有的啊
後一個問題.什麼都不輸出
幫忙看一下這個配置,幫忙看一下這個配置?
1 如果你預算不差那麼幾十 主機板換映泰 nf520 a2 東西做的好很多 2 你配置寫的太簡單 cpu 應該是雙核 4000 硬碟串列埠是盒裝還是散裝?具體型號如何。不同型號單片碟片容量不同,效能壽命有所差異。記憶體究竟是ddr2 667 還是 ddr2 800電源航嘉300w額定的有很度款,差異...
幫忙看一下這個是真的麼,幫忙看一下,幫我查一下,這個是真是假?
詮釋那一天 樓主你好,這款鞋我也有,我是低幫的。光看 走線色澤都還是不錯的,但是我要說一句,就現在而言,空軍和aj都是可以被模仿的,現在的莆田貨和真的已經沒有區別了。就這款鞋而論,只要假鞋 超五百,你就不用擔心真假,覺得分不出來。僅供參考 憑 是看不出真假的,買才是真假辨別最直接方式。莆田鞋高仿得和...
請幫忙看一下這個配置
cpu有條件的話 直接上q9550 效能和超頻更合適顯示卡建議直接上9800gtx 現在索泰和映眾 以及影弛的這個型號都很有優勢 主機板的話 要看你個人喜好了 個人建議搭配q9系列的四核應該搭配p5q d這款 記憶體的話 建議用金邦的黑龍 2g ddr800 x2套裝電源 建議額定450w起步 建議...