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

  免費注冊 查看新帖 |

Chinaunix

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

關于strncopy()的用法? [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-11-04 23:07 |只看該作者 |倒序瀏覽
大牛幫看看,我的代碼:
#include <stdio.h>
#include <string.h>
void main(void)
{       char *s="i am yours";
        char *p="ahhhhhhhhhhhhh";
        strncpy(p,s,4);
        printf("s:%s:\n",s);
        printf("p:%s:",p);
}
在linux下運行總是報“段錯誤”,改成
#include <stdio.h>
#include <string.h>
void main(void)
{       char *s="i am yours";
        char p[20]="ahhhhhhhhhhhhh";
        strncpy(p,s,4);
        printf("s:%s:\n",s);
        printf("p:%s:",p);
}
就好了。
不知是什么原因。strncpy()第一個參數(shù)不就是char *類型的嗎。

論壇徽章:
95
程序設計版塊每日發(fā)帖之星
日期:2015-09-05 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-09-17 06:20:00程序設計版塊每日發(fā)帖之星
日期:2015-09-18 06:20:002015亞冠之阿爾艾因
日期:2015-09-18 10:35:08月度論壇發(fā)貼之星
日期:2015-09-30 22:25:002015亞冠之阿爾沙巴布
日期:2015-10-03 08:57:39程序設計版塊每日發(fā)帖之星
日期:2015-10-05 06:20:00每日論壇發(fā)貼之星
日期:2015-10-05 06:20:002015年亞冠紀念徽章
日期:2015-10-06 10:06:482015亞冠之塔什干棉農(nóng)
日期:2015-10-19 19:43:35程序設計版塊每日發(fā)帖之星
日期:2015-10-21 06:20:00每日論壇發(fā)貼之星
日期:2015-09-14 06:20:00
2 [報告]
發(fā)表于 2009-11-05 09:27 |只看該作者

回復 #1 yians 的帖子

在第一個例子中,p 指向的地址是不可寫的,故有段錯誤。

論壇徽章:
0
3 [報告]
發(fā)表于 2009-11-05 10:43 |只看該作者

回復 #2 MMMIX 的帖子

不都是在heap上分配么?
為何有的可寫,有的不可以?明識~

論壇徽章:
0
4 [報告]
發(fā)表于 2009-11-05 10:45 |只看該作者
指向了常量區(qū)

論壇徽章:
0
5 [報告]
發(fā)表于 2009-11-05 16:47 |只看該作者
常量區(qū)?

論壇徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵節(jié)徽章
日期:2015-03-06 15:50:392015亞冠之大阪鋼巴
日期:2015-06-12 16:01:352015年中國系統(tǒng)架構師大會
日期:2015-06-29 16:11:2815-16賽季CBA聯(lián)賽之四川
日期:2018-12-17 14:10:21
6 [報告]
發(fā)表于 2009-11-05 17:44 |只看該作者
指針
例如
char *p="aaaaaa";
這段區(qū)域是readonly的,you can't rewrite in it

論壇徽章:
0
7 [報告]
發(fā)表于 2009-11-05 20:07 |只看該作者

回復 #1 yians 的帖子

給你轉一下c下面的存儲區(qū)吧:
在c中分為這幾個存儲區(qū)
1.棧 - 由編譯器自動分配釋放
2.堆 - 一般由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回收
3.全局區(qū)(靜態(tài)區(qū)),全局變量和靜態(tài)變量的存儲是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域,未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域。- 程序結束釋放
4.另外還有一個專門放常量的地方。- 程序結束釋放

char *p="ahhhhhhhhhhhhh"; 存放在常量區(qū),不允許更改
char p[20]="ahhhhhhhhhhhhh"; 存放在棧里面,可以更改

論壇徽章:
0
8 [報告]
發(fā)表于 2009-11-05 21:08 |只看該作者

回復 #6 T-Bagwell 的帖子

各位,討論的問題正是我目前比較沒懂的問題

最近在看spcaview,我發(fā)現(xiàn)里面大量的用到了字符串指針。其中很讓我有點不明白

例如,現(xiàn)頂一個字符串指針

char  *name;
...

...

..
然后在后面出現(xiàn)給給這個指針賦值。

name=getstring();
問題是,如果name是數(shù)組的話,這樣賦值沒問題,因為數(shù)組申請了空間后,系統(tǒng)不會再把這個空間分配給別人。
但是這里name是指針,雖然現(xiàn)在這個name已經(jīng)有了內(nèi)容,但是不排除系統(tǒng)會把name指向的空間分配給別人,那豈不是name原來指向的內(nèi)容就被覆蓋了??

不是很明白,記得給我們上嵌入式的老師第一節(jié)課就給我們講,

char   *p;
char   *s="asdger";

p=s;
老師說這種情況就是p指向的內(nèi)容可以被系統(tǒng)分配給人別人。為了避免這種情況,要么用數(shù)組,要么malloc申請空間。
我都混亂了
各位可否給我一個解釋?
謝謝

論壇徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵節(jié)徽章
日期:2015-03-06 15:50:392015亞冠之大阪鋼巴
日期:2015-06-12 16:01:352015年中國系統(tǒng)架構師大會
日期:2015-06-29 16:11:2815-16賽季CBA聯(lián)賽之四川
日期:2018-12-17 14:10:21
9 [報告]
發(fā)表于 2009-11-06 14:02 |只看該作者
這么去理解
指針是指向一段地址空間的,例如
你的手指指向一個房間,那么,這個房間里面可以進人
如果你的手指指向的是一塊鐵塊,那么,這個鐵塊里面能進去人么?

指針指向的"aaaaaaa",這段空間就是之前講的鐵塊一樣的地方,你沒有辦法往里面裝入東西,這段空間就是常量內(nèi)存空間
指向一段數(shù)組的時候,或者malloc申請的內(nèi)存空間的時候,這段空間就像房子一樣,隨便你進人和出人

論壇徽章:
0
10 [報告]
發(fā)表于 2009-11-06 23:09 |只看該作者

回復 #9 T-Bagwell 的帖子

謝謝,懂了。受教了。
您需要登錄后才可以回帖 登錄 | 注冊

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP