亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1886 | 回復(fù): 9
打印 上一主題 下一主題

c專家編程中的問題請教 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2008-10-28 08:53 |只看該作者 |倒序瀏覽
在 c專家編程書中48頁,有端程序/* 將源文件的timestamp轉(zhuǎn)換為表示當(dāng)?shù)馗袷饺掌诘淖址?/
char *localized_time(char *filename)
{
        struct tm *tm_ptr;
        struct stat stat_block;
        char buffer[120];
       
        /*獲得源文件的timestamp,格式為 time_t*/
         stat(file,&stat_block);
         
         /*把unix 的time_t轉(zhuǎn)換為tm結(jié)構(gòu),里邊保存當(dāng)?shù)貢r間*/
         tm_ptr=localtime(&stat_block,st_time)
         
         /*把tm結(jié)構(gòu)轉(zhuǎn)換成以當(dāng)?shù)貢r間*/
         strftime(buffer,sizeof(buffer),"%a %b %e %T %Y",tm_ptr);
         
         return buffer;
        }
         
書上說return buffer這行錯誤,  buffer是一個自動分配內(nèi)存的數(shù)組,是該函數(shù)的局部變量?刂屏麟x開聲明自動變量的范圍時,自動變量便自動失效。
但是我們調(diào)用一個函數(shù),都要先聲明的啊,那就意味著這個程序沒有問題啊!
比如一個簡單例子:
int add(int a,int b) {
        int c;
        c=a+b;
        return c;
}


#include<stdio.h>
int add(int a,int b);
int main(void)  {
        int a,b,d;
        a=1;
        b=2;
    d=add(a,b);
        printf("%d\n",d);
}
這樣絕對可以得到返回值的。
大家把我分析下這個問題原因啊,

論壇徽章:
0
2 [報告]
發(fā)表于 2008-10-28 09:14 |只看該作者
你用int當(dāng)然是沒問題。。。因為你已經(jīng)得到了傳回去的值

而傳指針就不一樣了,你確實得到了返回的指針(一個地址),可是這個指針所指向的內(nèi)存已經(jīng)被釋放了,如果你現(xiàn)在操作那塊內(nèi)存,會有未知的錯誤

論壇徽章:
0
3 [報告]
發(fā)表于 2008-10-28 09:25 |只看該作者
那句話事針對指針變量的。

走出函數(shù)后,指針指向的內(nèi)存空間已經(jīng)被釋放了。你再去引用就得不到正確的值了。

論壇徽章:
0
4 [報告]
發(fā)表于 2008-10-28 10:27 |只看該作者
建議再研究下值傳遞和指針傳遞那一塊兒

論壇徽章:
0
5 [報告]
發(fā)表于 2008-10-28 10:55 |只看該作者
你自己的例子是返回的數(shù)值,c專家編程書中48頁里面是返回的地址。
不錯,你是可以得到返回的地址.
但當(dāng)返回是地址的時候,地址里的內(nèi)容已經(jīng)被釋放掉了。但你仍然引用這個返回,讀取地址里的數(shù)據(jù),當(dāng)然會有問題。

論壇徽章:
0
6 [報告]
發(fā)表于 2008-10-28 11:17 |只看該作者
返回的是個指針,而指針所指向的內(nèi)存已經(jīng)釋放

論壇徽章:
0
7 [報告]
發(fā)表于 2008-10-28 15:22 |只看該作者
如果是局部變量,則return能夠安全返回的是數(shù)據(jù)類型對象。
例如,int a;char b;struct c;
這里的a,b,c都能安全返回

論壇徽章:
0
8 [報告]
發(fā)表于 2008-10-28 16:43 |只看該作者

回復(fù) #1 ironbridge 的帖子

返回自動變量時,如果返回的是值,則不會有問題。你說的情況是返回的地址,函數(shù)返回時對應(yīng)地址已經(jīng)被釋放了,所以才會有問題。

論壇徽章:
0
9 [報告]
發(fā)表于 2008-10-28 22:33 |只看該作者
哈哈, 樓主功力善缺, 明顯聲明的是棧的內(nèi)容, 還傳遞指針回去, 函數(shù)調(diào)用完了, 棧的內(nèi)容都找不到了~~~ 嘿, 用句話說就是, 你空手套白狼, 轉(zhuǎn)手了又想找回他, 哎, 那不是不可能的嘛~ 潑出去的水是收不回的

論壇徽章:
0
10 [報告]
發(fā)表于 2008-10-29 00:08 |只看該作者
char *localized_time(char *filename,char *ret)
最后是在參數(shù)里面添加一個用于返回的指針,然后函數(shù)里面用
ret=strdup(buffer);
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP