亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

基于C語言字符串函數的一些使用心得

2020-01-26 15:56:12
字體:
來源:轉載
供稿:網友

就字符串的拼接函數為例strcat.
原型:extern char *strcat(char *dest,char *src);
用法:#include <string.h>
功能:把src所指字符串添加到dest結尾處(覆蓋dest結尾處的'/0')并添加'/0'。
說明:src和dest所指內存區域不可以重疊且dest必須有足夠的空間來容納src的字符串。
      返回指向dest的指針。
舉例:

復制代碼 代碼如下:

// strcat.c
      #include <syslib.h>
      #include <string.h>
      main()
      {
        char d[20]="Golden Global";
        char *s=" View";
        clrscr();
        strcat(d,s);
        printf("%s",d);
        getchar();
        return 0;
      }

上面的這段代碼可以沒有問題的輸出 Golden Global View。
但是這里有如果這樣改呢:
復制代碼 代碼如下:

    // strcat.c
      #include <syslib.h>
      #include <string.h>
      main()
      {
        char *p="Golden Global";
        char *s=" View";
        clrscr();
        strcat(p,s);
        printf("%s",p);
        getchar();
        return 0;
      }

參數是符合它的要求2個指針參數的,但是這個程序卻運行不了。開始百思不得其解,為什么參數的類型都正確但是傳不回自己想要的結果。這樣只能去看函數原型了。

strcat函數原型

復制代碼 代碼如下:

char *strcat(char *strDest, const char *strScr) //將源字符串加const,表明其為輸入參數
{
    char * address = strDest;             //該語句若放在assert之后,編譯出錯

    assert((strDest != NULL) && (strScr != NULL)); //對源地址和目的地址加非0斷言

    while(*strDest)             //是while(*strDest!='/0')的簡化形式
    {                        //若使用while(*strDest++),則會出錯,因為++是不受循環
        strDest++;               //約束的。所以要在循環體內++;因為要是*strDest最后指
    }                        //向該字符串的結束標志'/0'。
    while(*strDest++ = *strScr++) //是while((*strDest++ = *strScr++)!='/0')的簡化形式
    {
        NULL;                 //該循環條件內可以用++,
    }                          //此處可以加語句*strDest='/0';有無必要?

    return address;               //為了實現鏈式操作,將目的地址返回
}

從這句話就知道為什么了
復制代碼 代碼如下:

while(*strDest++ = *strScr++)
{
    NULL;
}

如果strDest是一個指針,這里的 *strDest 就是取一個未知地址的值,這個是編譯器不能容忍的。但是為什么當strDest是一個數組的時候可以呢,因為數組等于給它分配連續地址。申請到的安全地址當然可以使用了。當然我們也可以寫一個傳入真正的以指針為參數的字符串拼接函數,下面是我自己寫的一個函數原型:
復制代碼 代碼如下:

char *strcatDemo2(char *str1, const char *str2) //將源字符串加const,表明其為輸入參數
{
    assert((str1 != NULL) &&(str2 != NULL));

    char *address = (char *)malloc((strlen(str1) + strlen(str2) + 1) *sizeof(char));

    char *des = address;

    assert(address != NULL);

    while(*str1)
    {
        *address = *str1;
        str1++;
        address++;
    }

    while(*str2)
    {
        *address = *str2;
        str2++;
        address++;
    }   

    *address = '/0';

    return des;
}

在這個里面給指針address 申請了空間來存放2個字符串的東西,注意,這里要多申請一個,因為字符串要求一個'/0'結尾。使用就這樣使用了:
復制代碼 代碼如下:

int main(int argc, char *argv[])
{
    char *p = "hello, ", *s = "world!";

    char *t = strcatDemo2(p, s);
    puts(t);

  system("PAUSE");   
  return 0;
}

上面寫的那個就類似于C#里面字符串相加的功能了。
其實大多數C語言里面的字符串都是,一個字符數組參數,一個字符指針參數來使用的。下面就是這些東西的原型,可以好好看下,避免以后犯錯。

strcat函數原型:

復制代碼 代碼如下:

char *strcat(char *strDest, const char *strScr) //將源字符串加const,表明其為輸入參數
{
       char * address = strDest;             //該語句若放在assert之后,編譯出錯
       assert((strDest != NULL) && (strScr != NULL)); //對源地址和目的地址加非0斷言
       while(*strDest)             //是while(*strDest!='/0')的簡化形式
       {                        //若使用while(*strDest++),則會出錯,因為++是不受循環
              strDest++;               //約束的。所以要在循環體內++;因為要是*strDest最后指
       }                        //向該字符串的結束標志'/0'。
       while(*strDest++ = *strScr++) //是while((*strDest++ = *strScr++)!='/0')的簡化形式
       {
              NULL;                 //該循環條件內可以用++,
       }                          //此處可以加語句*strDest='/0';有無必要?
return address;               //為了實現鏈式操作,將目的地址返回
}

strcpy函數原型:
復制代碼 代碼如下:

char *strcpy(char *strDest, const char *strScr)
{
       char *address=strDest;
       assert((strDest != NULL) && (strScr != NULL));
       while(*strScr)                   //是while(*strScr != '/0')的簡化形式;
       {
              *strDest++ = *strScr++;
       }
       *strDest = '/0';                       //當strScr字符串長度小于原strDest字符串長度
       return address;                      //時,如果沒有改語句,就會出錯了。
}

strcmp函數原型:
復制代碼 代碼如下:

int strcmp (const char *str1,const char *str2)
{          
       int len = 0;
       assert((str1 != '/0') && (str2 != '/0'));
       while(*str1 && *str2 && (*str1 == *str2))
       {
              str1++;
              str2++;
       }
       return *str1-*str2;
}

strlen函數原型:
復制代碼 代碼如下:

int strlen(const char *str)
{
    int len = 0;
       assert(str != NULL);
       while(*str++)
       {
              len++;
       }
       return len;
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成年人视频网站| 中国china体内裑精亚洲片| 精品中文字幕乱| 在线精品高清中文字幕| 粉嫩av一区二区三区免费野| 国产精品一区电影| 成人免费视频97| 精品中文字幕在线| 国产精品白丝av嫩草影院| 欧美裸体xxxx极品少妇软件| 欧美贵妇videos办公室| 91精品视频播放| 欧美多人乱p欧美4p久久| 国产精品免费一区| 亚洲97在线观看| 日韩最新av在线| 亚洲性线免费观看视频成熟| 国产欧美日韩丝袜精品一区| 91爱视频在线| 亚洲春色另类小说| 中文字幕日韩电影| 欧美日韩免费观看中文| 高清在线视频日韩欧美| 亚洲日韩欧美视频| 精品亚洲一区二区三区在线播放| 日韩在线一区二区三区免费视频| 成人国内精品久久久久一区| 欧美日韩国产一区中文午夜| 亚洲天堂男人的天堂| 国产欧美日韩专区发布| 中文字幕日韩欧美精品在线观看| 国产精品直播网红| 97在线视频一区| 欧美怡红院视频一区二区三区| 久久婷婷国产麻豆91天堂| 成人h猎奇视频网站| 亚洲欧美在线x视频| 久久久亚洲网站| 欧美精品电影在线| 成人福利在线视频| 日韩中文第一页| 日韩网站免费观看高清| 国产欧美日韩综合精品| 国产成人在线播放| 亚洲区一区二区| 成人高h视频在线| 欧美—级a级欧美特级ar全黄| 波霸ol色综合久久| 欧美成人中文字幕在线| 97热在线精品视频在线观看| 欧美日韩国产丝袜另类| 欧美性猛交xxxx乱大交| 亚洲三级黄色在线观看| 成人中文字幕+乱码+中文字幕| 操人视频在线观看欧美| 永久免费精品影视网站| 亚洲国产精品高清久久久| 亚洲激情在线观看视频免费| 欧美精品videosex牲欧美| 国色天香2019中文字幕在线观看| 2023亚洲男人天堂| 久久天天躁狠狠躁夜夜爽蜜月| 美女福利视频一区| 日韩亚洲国产中文字幕| 成人国产精品免费视频| 久久精品久久久久电影| 亚洲天堂免费观看| 欧美性猛交xxxx黑人| 欧美日韩国产一区中文午夜| 在线观看日韩视频| 国模极品一区二区三区| 久久久久女教师免费一区| 国产精品久久久久久久久久免费| 97热精品视频官网| 97在线免费视频| 欧美日韩免费区域视频在线观看| 亚洲午夜av久久乱码| 国产成人拍精品视频午夜网站| 91久久国产婷婷一区二区| 97国产精品久久| 国产精品一区久久久| 久久精品视频99| 国产大片精品免费永久看nba| 国产在线观看精品一区二区三区| 欧美另类第一页| 97视频免费在线观看| 国色天香2019中文字幕在线观看| 国产精品美女在线| 欧美日韩中文字幕在线视频| 97视频在线免费观看| 国产欧美一区二区白浆黑人| 一本一本久久a久久精品综合小说| 亚洲色图色老头| 欧美美女操人视频| 日韩在线视频播放| 欧美日韩另类在线| 亚洲综合中文字幕在线| 日韩免费观看在线观看| 91在线视频导航| 国产免费一区二区三区在线观看| 欧美亚洲另类视频| 日韩av黄色在线观看| 欧美日韩加勒比精品一区| 色综合久久天天综线观看| 欧美在线观看一区二区三区| 欧美成人合集magnet| 亚洲成人av中文字幕| 日韩精品一二三四区| 粉嫩老牛aⅴ一区二区三区| 色老头一区二区三区| 色哟哟入口国产精品| 亚洲欧洲日产国码av系列天堂| 91精品久久久久久综合乱菊| 欧美性生交xxxxxdddd| 啊v视频在线一区二区三区| 日韩欧美黄色动漫| 992tv成人免费影院| 亚洲一区二区三区毛片| 亚洲一区二区三区xxx视频| 亚洲国产精品久久91精品| 色噜噜狠狠狠综合曰曰曰| 亚洲成人av在线播放| 最新91在线视频| 国产精品久久久久免费a∨大胸| 国产亚洲视频中文字幕视频| 日韩有码在线电影| 欧美激情精品久久久久久黑人| 亚洲图片在线综合| 国产精品流白浆视频| 国产日韩精品一区二区| 亚洲美女动态图120秒| 久久久久999| 中文字幕亚洲情99在线| 日韩在线观看电影| 人九九综合九九宗合| 亚洲精品美女在线观看| 精品亚洲夜色av98在线观看| 国产精品免费小视频| 国产精品久久久久aaaa九色| 成人黄色免费网站在线观看| 久久精品这里热有精品| 亚洲美女视频网| 欧美成人手机在线| 国产欧美精品在线播放| 亚洲国产中文字幕久久网| 久久精品视频99| 日韩欧美国产免费播放| 久久777国产线看观看精品| 69国产精品成人在线播放| 亚洲毛片在线看| 欧美成人免费观看| 国产人妖伪娘一区91| 丁香五六月婷婷久久激情| 日韩www在线| 九九热精品视频国产| 日韩免费观看视频| 亚洲深夜福利视频| 欧美成人精品不卡视频在线观看| 精品亚洲永久免费精品| 日韩大胆人体377p| 成人精品aaaa网站| 久久成年人视频| 久久久亚洲福利精品午夜| 亚洲精品国产综合区久久久久久久|