首先函數(shù):char strcat (char x[],char y[])返回值是char型 你在函數(shù)中卻返回char型指針。其次for語句:for (i = m;i = m + n;i ++)m+n要大于x,y字符串的長度,可能會越界。
創(chuàng)新互聯(lián)憑借專業(yè)的設(shè)計團(tuán)隊扎實的技術(shù)支持、優(yōu)質(zhì)高效的服務(wù)意識和豐厚的資源優(yōu)勢,提供專業(yè)的網(wǎng)站策劃、網(wǎng)站設(shè)計、成都網(wǎng)站設(shè)計、網(wǎng)站優(yōu)化、軟件開發(fā)、網(wǎng)站改版等服務(wù),在成都10多年的網(wǎng)站建設(shè)設(shè)計經(jīng)驗,為成都近千家中小型企業(yè)策劃設(shè)計了網(wǎng)站。
另外返回值并不一定的我們想要的結(jié)果,比如1+1如果返回3了,那就是函數(shù)代碼有錯誤。
在函數(shù)中是無法檢查數(shù)組(字符串)空間大小的,所以就會一直復(fù)制,如果越界了也不會有明顯錯誤,但如果遇到標(biāo)記為不可寫的內(nèi)存便會運行時報錯。輸出時也無法檢查數(shù)組大小,完全根據(jù)結(jié)束標(biāo)志輸出。
這個函數(shù),是將棧內(nèi)局部變量的地址返回給調(diào)用者,調(diào)用者拿到的指針屬于典型的超出生命周期的指針,對它的使用會不會引起錯誤,依賴于進(jìn)一步的操作,本身行為就是不可預(yù)期的。
但是你不能訪問指針指向的內(nèi)存空間,因為它隨著函數(shù)結(jié)束被釋放了。這是C語言的參數(shù)及返回值傳遞機(jī)制,也就是值傳遞。其實C++使用string也就是把字符串封裝了,所以好用,但函數(shù)傳遞的本質(zhì)還是一樣。
因為C語言在設(shè)計時是以效率優(yōu)先的,因為數(shù)組可能很大,整體傳遞很花時間,所以不允許數(shù)組整體賦值,也不能返回數(shù)組,也不作為參數(shù)傳遞(數(shù)組作參數(shù)時實際是將它轉(zhuǎn)化成了指針,這好像不符合值傳遞)。
首先指出你寫的一處錯誤,fun函數(shù)沒有返回值。你要么定義為void,既然定義成int,就要返回數(shù)據(jù)。
程序編譯沒問題,應(yīng)該是你雙擊沒有看到結(jié)果吧,呵呵 這里生成的是控制臺程序,直接在Windows下運行窗口只會一閃而過,是看不出來的,而并非程序沒有運行。
首先,你應(yīng)該明白n=abc這句程序做了些什么,它的作用是新建立了一個字符串常量abc,然后將字符指針n指向這個常量。
首先你的scanf中不需要\n,這個東西,這是錯誤的寫法。只要寫:scanf(%d,n);而你下面的是一個while循環(huán),所以當(dāng)然會循環(huán)的輸出的,知道你的n--為0,也就是while()循環(huán)中的條件為假時,就停止循環(huán)。
可以直接調(diào)用子函數(shù),方法如下:(1)在主函數(shù)之前定義子函數(shù),在主函數(shù)體內(nèi)可以直接調(diào)用。(2)在主函數(shù)之后定義子函數(shù),在主函數(shù)體內(nèi)必須先聲明子函數(shù),才可以調(diào)用。
1、返回值是函數(shù)的計算結(jié)果,比如用函數(shù)計算1+1返回值就是2;另外返回值并不一定的我們想要的結(jié)果,比如1+1如果返回3了,那就是函數(shù)代碼有錯誤。
2、很正常啊,沒有返回值,就是不需要返回值。比如:定義一個函數(shù),在函數(shù)中打印信息到屏幕上。
3、void main()表示函數(shù)無返回值,就是說在程序的結(jié)尾處不需要加上return 0。而return是在函數(shù)體中,用來返回特定值的。
4、對的,C語言中函數(shù)句柄(指針)指向一個地址,如果該函數(shù)沒有Return,那么函數(shù)句柄就沒有被賦值,會返回句柄指向內(nèi)存的值,表現(xiàn)出一個隨機(jī)的數(shù)。
5、無返回值的函數(shù),只進(jìn)行某種操作。有返回值的函數(shù),可以將某個變量或指針返回其調(diào)用函數(shù)。