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

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
<2009年10月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用鏈接

留言簿(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>
            亚洲欧美综合网| 在线综合亚洲欧美在线视频| 国产精品99久久久久久久vr| 韩国亚洲精品| 亚洲国产成人久久综合| 欧美调教视频| 亚洲欧洲日本专区| 亚洲日本中文字幕区| 亚洲精品视频在线观看网站| 欧美福利视频在线观看| 在线视频你懂得一区| 欧美 日韩 国产一区二区在线视频 | 午夜精品在线观看| 欧美日韩精品系列| 亚洲人成久久| 一区二区三区精品在线| 欧美精品激情在线| 亚洲国产精品一区二区www| 免费短视频成人日韩| 日韩视频在线观看免费| 欧美亚洲在线| 噜噜噜噜噜久久久久久91 | 国产精品亚洲а∨天堂免在线| 欧美福利视频一区| 日韩天堂在线视频| 欧美午夜免费电影| 久久婷婷久久| 亚洲国产三级| 欧美亚洲网站| 久久精品免费看| 日韩视频永久免费观看| 久久亚洲欧美| 一区二区高清视频| 日韩亚洲欧美成人一区| 久久综合九色99| 亚洲欧美日本在线| 欧美粗暴jizz性欧美20| 欧美激情精品| 欧美大片91| 国产一区二区三区精品欧美日韩一区二区三区| 激情一区二区三区| 国产精品av免费在线观看| 欧美激情精品久久久久久黑人 | 亚洲精品乱码久久久久久蜜桃麻豆 | 久久综合色综合88| 欧美成人蜜桃| 亚洲欧美日韩国产精品| 亚洲国产成人在线| 国产精品视频网| 欧美韩日一区| 蜜桃av综合| 久久激情久久| 久久国产一区二区| 亚洲欧美99| 亚洲欧美日韩国产一区| 夜夜爽99久久国产综合精品女不卡| 亚洲精品中文字幕女同| 日韩亚洲精品电影| 日韩亚洲欧美成人| 欧美激情亚洲自拍| 久久免费精品视频| 国产热re99久久6国产精品| 99精品久久免费看蜜臀剧情介绍| 最近看过的日韩成人| 久久先锋影音av| 久久一区精品| 影音先锋亚洲电影| 久久人人爽人人爽爽久久| 另类专区欧美制服同性| 在线电影一区| 欧美成人乱码一区二区三区| 欧美福利电影网| 亚洲经典三级| 欧美另类videos死尸| 99国内精品久久| 亚洲一区视频| 国产日韩精品视频一区| 午夜欧美大片免费观看| 久久婷婷蜜乳一本欲蜜臀| 亚洲大胆av| 欧美精选午夜久久久乱码6080| 亚洲免费精彩视频| 午夜精品国产更新| 国产一区二区三区直播精品电影| 久久xxxx精品视频| 欧美不卡视频一区| 日韩午夜免费视频| 国产精品无码永久免费888| 午夜伦欧美伦电影理论片| 六十路精品视频| 亚洲最黄网站| 国产一区二区三区黄视频| 另类图片综合电影| 亚洲视频第一页| 免费成人在线观看视频| 中文精品99久久国产香蕉| 国产日韩欧美自拍| 欧美va亚洲va香蕉在线| 亚洲一区二区三区色| 欧美不卡在线视频| 亚洲影视中文字幕| 亚洲丁香婷深爱综合| 欧美三日本三级少妇三2023| 久久精品免费| 中文日韩欧美| 免费亚洲一区二区| 欧美一区二区三区日韩| 亚洲国产日韩欧美在线动漫| 国产精品免费视频xxxx| 欧美aaaaaaaa牛牛影院| 午夜欧美理论片| 日韩一级大片| 亚洲第一综合天堂另类专| 亚洲三级电影全部在线观看高清| 国产精品一区二区女厕厕| 欧美激情精品久久久久久大尺度 | 黑丝一区二区三区| 欧美日韩亚洲高清一区二区| 久久精品一区蜜桃臀影院| 亚洲特级片在线| 亚洲精品久久久久久久久久久| 久久久久久久999| 午夜精品一区二区三区在线视| 亚洲美女精品一区| 亚洲成人在线观看视频| 国产亚洲精品bv在线观看| 欧美午夜一区| 99热这里只有成人精品国产| 一本色道久久| 久久激情视频| 亚洲欧美日韩成人高清在线一区| 亚洲青涩在线| 亚洲国产高清aⅴ视频| 美女被久久久| 另类成人小视频在线| 久久午夜色播影院免费高清| 欧美一级专区免费大片| 午夜精品国产更新| 性欧美激情精品| 欧美一区二区三区在线| 午夜精品福利一区二区蜜股av| 亚洲一区美女视频在线观看免费| 一区二区欧美精品| 在线视频精品一| 一区二区三区精品| 亚洲一区二区三区久久| 一区二区三区 在线观看视频| 日韩午夜在线电影| 一本久道久久综合狠狠爱| 一本到12不卡视频在线dvd| 这里只有精品电影| 亚洲一区二区三区精品在线观看| 亚洲在线一区| 欧美一区二区在线| 另类亚洲自拍| 亚洲第一在线| 中文无字幕一区二区三区| 午夜日韩视频| 牛牛影视久久网| 欧美日韩亚洲激情| 国产精品专区h在线观看| 国产午夜精品全部视频播放| 激情久久久久久久| 亚洲区免费影片| 亚洲一区在线免费| 久久久久久网| 亚洲国产mv| 亚洲一区二区三区高清不卡| 欧美亚洲综合在线| 免费观看亚洲视频大全| 欧美性大战久久久久久久蜜臀| 国产精品麻豆va在线播放| 韩国一区二区在线观看| 亚洲精选在线| 久久经典综合| 亚洲精品乱码久久久久久日本蜜臀 | 在线不卡中文字幕播放| 99国内精品久久| 久久精品视频免费观看| 欧美韩国一区| 香蕉久久国产| 欧美激情免费观看| 国产亚洲福利| 夜夜嗨av一区二区三区中文字幕 | 亚洲图片在区色| 久久夜色精品国产亚洲aⅴ | 欧美影视一区| 欧美日韩在线另类| **网站欧美大片在线观看| 亚洲永久精品大片| 欧美福利视频一区| 亚洲欧美在线播放| 欧美日韩国产精品自在自线| 国内外成人在线| 午夜精品久久久久99热蜜桃导演| 欧美激情第8页| 久久成人亚洲| 国产麻豆成人精品| 亚洲四色影视在线观看| 欧美一区二区日韩一区二区|