青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 297,  comments - 15,  trackbacks - 0
char * fun(char *str)
{
memset(str, 0, sizeof(str));  //用strlen和sizeof()有什么區別
...
return str;
}
int main(int argc, char* argv[])
{
char *a, b[400];
a = fun(b);
}
strlen()和sizeof()出來的長度是不一樣的,但結果好像都一樣,memset()有那么聰明嗎?


sizeof 這個是在匯編里面就存在的一個指令,可以直接返回你要判斷的變量戰局的內存的大?gt;>?br>這個是在編譯器就確定的,一個要注意的問題是,看下面的代碼
char* str=new char[100]
sizeof(str)
這個可是會返回4哦,可不是你要的400
而 char str[100]
sizeof(str)是會返回400的。
但是,無論如何strlen()都是一個函數,它返回的是一個字符串的長度,也就是說從你給的字符串
首地址開始,一直到'\0'為止的這一段長度。
memset真的沒有那么智能,但是它確實高效。


strlen 返回的是實際串長
sizeof 如果*str是指針則返回 char *的大小 如果是用數組聲明 返回的是空間的大小
char *sz = "abcde";
char sz1[20] = "abcde";
cout<<sizeof(sz)<<endl;
cout<<strlen(sz)<<endl;
cout<<sizeof(sz1)<<endl;
cout<<strlen(sz1)<<endl;
輸出:
4
5
20
5


memset(str, 0, sizeof(str));  //用strlen和sizeof()有什么區別?
答:用sizeof的話,只給str所指向的內存塊連續4個字節清0;
    用strlen的話,是給str所指向的字符串全部清0;
     
    sizeof(str)返回str這個指針變量所占的內存字節數目;
    strlen(str) 返回str所指向的字符串的長度


sizeof()應該是編譯時處理的。strlen是函數,不一樣的


char * fun(char *str)
{
memset(str, 0, sizeof(str));  //sizeof(str))求得是指針str的大小,指針占空間是一
                                      //樣的4個字節;str指向的是數組的首地址,這樣相當于
                                     //將數組前四個元素至為‘\0’,用printf("%s")的話,遇
                                    //到第一個'\0',即退出。
                                   //如果用memset(str, 0, strlen(str));就得看運氣了,
                                  //str指向數組b[400]首地址,b[400]沒有顯示初始化,
                                 //strlen是遇到'\0'退出,有可能b[0]就是'\0'
                                //strlen(str)的結果就為0,用printf("%s")就打印不出來了;
                                //strlen(str)也有可能是其他值,得看'\0'在b[400]的哪個位置了
return str;
}
int main(int argc, char* argv[])
{
char *a, b[400];
a = fun(b);
}


char * fun(char *str)
{
memset(str, 0, sizeof(str)); //sizeof(str))求得是指針str的大小,指針占空間是一
                                  //樣的4個字節;str指向的是數組的首地址,這樣相當于
                                 //將數組前四個元素至為‘\0’,用printf("%s")的話,遇
                                //到第一個'\0',即退出。
                               //如果用memset(str, 0, strlen(str));就得看運氣了,
                              //str指向數組b[400]首地址,b[400]沒有顯示初始化,
                             //strlen是遇到'\0'退出,有可能b[0]就是'\0'
                            //strlen(str)的結果就為0,用printf("%s")就打印不出來了;
                           //strlen(str)也有可能是其他值,得看'\0'在b[400]的哪個位置了
return str;
}
int main(int argc, char* argv[])
{
char *a, b[400];
a = fun(b);
}


sizeof(str))求得是指針str的大小



strlen---------測“字符個數”(包括:不可見字符,如:空格等)
sizeof---------測“BYTE個數”


sizeof返回對象所占用的字節大小.
strlen返回字符個數.
在使用sizeof時,有一個很特別的情況,就是數組名到指針蛻變,
char Array[3] = {'0'};
sizeof(Array) == 3;
char *p = Array;
sizeof(p) == 1;


在傳遞一個數組名到一個函數中時,它會完全退化為一個指針


學習,一直寫代碼,對strlen和sizeof的區別比較困惑,現在清楚了

二者的區別:
1.sizeof操作符的結果類型是size_t,它在頭文件中typedef為unsigned int類型。
該類型保證能容納實現所建立的最大對象的字節大小。

2.sizeof是算符,strlen是函數。

3.sizeof可以用類型做參數,strlen只能用char*做參數,且必須是以''\0''結尾的。
sizeof還可以用函數做參數,比如:
short f();
printf("%d\n", sizeof(f()));
輸出的結果是sizeof(short),即2。

4.數組做sizeof的參數不退化,傳遞給strlen就退化為指針了。

5.大部分編譯程序 在編譯的時候就把sizeof計算過了 是類型或是變量的長度這就是sizeof(x)可以用來定義數組維數的原因
char str[20]="0123456789";
int a=strlen(str); //a=10;
int b=sizeof(str); //而b=20;

6.strlen的結果要在運行的時候才能計算出來,時用來計算字符串的長度,不是類型占內存的大小。

7.sizeof后如果是類型必須加括弧,如果是變量名可以不加括弧。這是因為sizeof是個操作符不是個函數。
 
8.當適用了于一個結構類型時或變量, sizeof 返回實際的大小,
 當適用一靜態地空間數組, sizeof 歸還全部數組的尺寸。
 sizeof 操作符不能返回動態地被分派了的數組或外部的數組的尺寸

9.數組作為參數傳給函數時傳的是指針而不是數組,傳遞的是數組的首地址,
如:
fun(char [8])
fun(char [])
都等價于 fun(char *)
在C++里參數傳遞數組永遠都是傳遞指向數組首元素的指針,編譯器不知道數組的大小
如果想在函數內知道數組的大小, 需要這樣做:
進入函數后用memcpy拷貝出來,長度由另一個形參傳進去
fun(unsiged char *p1, int len)
{
  unsigned char* buf = new unsigned char[len+1]
  memcpy(buf, p1, len);
}

我們能常在用到 sizeof 和 strlen 的時候,通常是計算字符串數組的長度
看了上面的詳細解釋,發現兩者的使用還是有區別的,從這個例子可以看得很清楚:

char str[20]="0123456789";
int a=strlen(str); //a=10; >>>> strlen 計算字符串的長度,以結束符 0x00 為字符串結束。
int b=sizeof(str); //而b=20; >>>> sizeof 計算的則是分配的數組 str[20] 所占的內存空間的大小,不受里面存儲的內容改變。 

上面是對靜態數組處理的結果,如果是對指針,結果就不一樣了

char* ss = "0123456789";
sizeof(ss) 結果 4 ===》ss是指向字符串常量的字符指針,sizeof 獲得的是一個指針的之所占的空間,應該是

長整型的,所以是4
sizeof(*ss) 結果 1 ===》*ss是第一個字符 其實就是獲得了字符串的第一位'0' 所占的內存空間,是char類

型的,占了 1 位

strlen(ss)= 10 >>>> 如果要獲得這個字符串的長度,則一定要使用 strlen。



posted on 2008-10-21 17:17 chatler 閱讀(521) 評論(0)  編輯 收藏 引用 所屬分類: C++_BASIS
<2008年10月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺這個博客還是不錯,雖然做的東西和我不大相關,覺得看看還是有好處的

network

OSS

  • Google Android
  • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
  • os161 file list

overall

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美成人tv| 久久久免费精品视频| 欧美破处大片在线视频| 亚洲激情网站免费观看| 亚洲国产精品久久久久秋霞影院| 久久女同互慰一区二区三区| 亚洲国产日韩欧美在线图片| 亚洲国产精品久久久久秋霞影院| 欧美精品在线免费| 亚洲一区二区三区在线| 亚洲午夜精品一区二区| 国产一区二区三区高清| 免费成人av资源网| 欧美成年人视频| 亚洲一区二区在线免费观看视频| 亚洲欧美国产精品专区久久| 国语自产精品视频在线看8查询8| 亚洲成人直播| 国产精品久久久久av| 你懂的一区二区| 欧美日韩一区二区三区| 久久精品国产2020观看福利| 久久久伊人欧美| 亚洲视频网在线直播| 欧美影院精品一区| 亚洲精品美女在线观看| 亚洲一二三区在线观看| 在线播放国产一区中文字幕剧情欧美| 91久久国产综合久久91精品网站 | 久久日韩精品| 欧美高清视频免费观看| 欧美中文在线观看| 欧美日韩少妇| 亚洲国产精品热久久| 亚洲欧美日韩精品久久久久| 亚洲黄色高清| 欧美尤物巨大精品爽| 夜夜嗨av色一区二区不卡| 久久精品欧美日韩精品| 午夜在线电影亚洲一区| 欧美日韩精品一区视频 | 亚洲精品久久久久久一区二区| 亚洲专区在线| 亚洲在线观看视频网站| 欧美电影在线观看| 蜜桃久久av| 国内激情久久| 欧美一区二区三区免费观看| 亚洲欧美日韩区| 欧美精品久久久久久久| 亚洲风情亚aⅴ在线发布| 狠狠久久亚洲欧美| 欧美一级大片在线免费观看| 亚洲视频在线一区| 欧美日韩在线另类| 亚洲每日更新| 99精品国产高清一区二区| 另类尿喷潮videofree| 欧美一区二区在线视频| 国产精品一区二区三区四区| 亚洲小视频在线观看| 亚洲先锋成人| 国产精品igao视频网网址不卡日韩| 91久久久久久久久| 亚洲最新视频在线| 欧美日韩在线观看视频| 99国产精品99久久久久久粉嫩| 一区二区三区欧美日韩| 欧美色欧美亚洲高清在线视频| 亚洲精品欧美一区二区三区| 亚洲免费观看高清在线观看 | 久久久午夜电影| 蜜桃av久久久亚洲精品| 亚洲欧洲精品一区| 欧美日韩二区三区| 一区二区av| 欧美怡红院视频一区二区三区| 国产精品素人视频| 久久精品123| 亚洲国产另类精品专区| 一本色道久久综合亚洲91| 国产精品毛片a∨一区二区三区| 亚洲网站在线| 久久婷婷蜜乳一本欲蜜臀| 亚洲高清av| 欧美三区美女| 久久av红桃一区二区小说| 亚洲国产精品激情在线观看| 一区二区三区**美女毛片| 国产日韩欧美高清免费| 久久综合中文| 亚洲小说欧美另类社区| 久久免费视频在线观看| 日韩亚洲欧美成人| 国产一区二区欧美日韩| 欧美激情国产日韩| 亚洲男女自偷自拍图片另类| 欧美顶级艳妇交换群宴| 午夜天堂精品久久久久| 91久久精品一区二区别| 国产欧美韩国高清| 欧美精品一区二区三区在线播放| 久久久av毛片精品| 99re6热只有精品免费观看| 国产欧美va欧美va香蕉在| 欧美 日韩 国产一区二区在线视频 | 国产在线精品二区| 欧美连裤袜在线视频| 欧美专区福利在线| 一本大道久久a久久精品综合| 猛干欧美女孩| 久久精品中文字幕一区| 亚洲午夜精品一区二区| 亚洲黄色一区| 国自产拍偷拍福利精品免费一| 欧美喷潮久久久xxxxx| 久久中文在线| 欧美淫片网站| 亚洲在线不卡| 99国产精品久久| 亚洲国产天堂网精品网站| 久久免费精品视频| 久久久国产精品亚洲一区 | 欧美专区18| 亚洲一区在线视频| 夜夜嗨av一区二区三区四区| 亚洲国产二区| 在线观看视频欧美| 影音先锋日韩资源| 国产婷婷成人久久av免费高清| 欧美日韩亚洲一区在线观看| 欧美精品网站| 欧美精品aa| 欧美久久久久久蜜桃| 欧美成人一区二区三区| 美女黄毛**国产精品啪啪| 久久久青草婷婷精品综合日韩| 久久av二区| 久久久精彩视频| 久久亚洲综合| 蜜桃av一区二区| 欧美成人国产一区二区| 欧美高清成人| 欧美日韩a区| 欧美日韩综合一区| 国产精品久久久久久av福利软件| 欧美视频在线观看视频极品| 欧美日韩在线一区| 国产精品毛片| 国内在线观看一区二区三区| 狠狠操狠狠色综合网| 黄色成人在线网站| 亚洲国产专区校园欧美| 一区二区电影免费在线观看| 亚洲一区二区三区色| 午夜久久福利| 猛男gaygay欧美视频| 亚洲国产精品成人精品| 夜夜躁日日躁狠狠久久88av| 午夜久久美女| 美女主播一区| 欧美三级网页| 韩国欧美国产1区| 亚洲国产91精品在线观看| 日韩一区二区免费看| 亚洲免费在线视频一区 二区| 久久国产精品久久久| 免费欧美网站| 一级成人国产| 久久久久成人精品| 欧美黑人多人双交| 国产欧美日韩一区| 91久久久精品| 欧美一区二区三区在线免费观看| 噜噜噜久久亚洲精品国产品小说| 91久久精品美女高潮| 亚洲欧美电影在线观看| 久久久人成影片一区二区三区 | 性色av香蕉一区二区| 免费成人黄色| 一区二区三区四区五区在线| 欧美一区二区三区视频免费| 欧美大片一区二区| 国产一区999| 亚洲网站视频| 免费观看在线综合色| 亚洲午夜视频在线| 欧美sm视频| 国产在线日韩| 亚洲欧美激情视频| 亚洲电影第1页| 欧美一区二区视频在线观看2020| 欧美日本国产视频| 在线观看视频亚洲| 久久精品亚洲精品| 亚洲视频久久| 欧美日韩一区二区视频在线观看| 一区免费观看视频| 欧美中文字幕在线播放| 国产精品99久久久久久久女警 |