程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 一起talk C栗子吧(第七十回:C語言實例--字符串初始化函數)

一起talk C栗子吧(第七十回:C語言實例--字符串初始化函數)

編輯:關於C語言

一起talk C栗子吧(第七十回:C語言實例--字符串初始化函數)



各位看官們,大家好,上一回中咱們說的是字符串查找的例子,這一回咱們說的例子是:字符串初始化函數。閒話休提,言歸正轉。讓我們一起talk C栗子吧!

在定義局部變量的時候,我們需要對字符串進行初始化操作。當然了,手動給字符串初始化是可以的,不過標准庫給我們提供了專門的初始化函數:memset。下面我們來介紹它的用法。

memset函數用法

memset函數的原型:void *memset(void *s, int c, size_t count) memset函數的用法:在s指向的字符串中,把前count個字符賦值為c。

大家可以看到s為void類型的指針,因此,該函數也可以給某個內存區域進行賦值。此外,count經常使用sizeof(type)*n來表示,其中type是s的具體類型,n為數量。這樣可以保證每塊內存區域都能被正確地賦值。

光說不練,不是我們的風格,接下來,我們舉一個實際的例子進行說明:

#define SIZE 16

int main()
{
    char str[SIZE];   //定義一個局部變量,不進行初始化操作
    printf("The old string is:%s \n",str);
    memset(str,'a',SIZE*sizeof(char));
    printf("The setted string is:%s \n",str);
    return 0;
}

下面是程序運行的結果:

The old string is:-$]??t?              //沒有初始化時輸出亂碼
The setted string is:aaaaaaaaaaaaaaaa  //初始化後輸出正確的值 

從上面的結果中,大家可以看到:字符串初始化前後的輸出內容完全不同。

DIY memset函數

void *diy_memset(void *s,char c, int n)
下面我們發揚一下DIY的風格,自己定義一個memset函數。

1.從s所指字符串中取出一個字符,然後使用c給該字符賦值; 2.接著取s中的下一個字符,繼續賦值; 3.重復步驟2,直到賦值n次時停止賦值。

下面是我寫的代碼,請大家參考:

void *diy_memset(void *s,char c, int n)
{
    char *p = NULL;
    if(NULL == s)
        return NULL;

    p = s;
    while(n>0)
    {
        *p = c;
        p++;
        n--;
    }

    return s;
}

下面是標准庫中memset函數的代碼,請大家和我們DIY的代碼進行比較:

/**
 * memset - Fill a region of memory with the given value
 * @s: Pointer to the start of the area.
 * @c: The byte to fill the area with
 * @count: The size of the area.
 *
 * Do not use memset() to access IO space, use memset_io() instead.
 */
void *memset(void *s, int c, size_t count)
{
        char *xs = s;

        while (count--)
                *xs++ = c;
        return s;
}

通過比較,大家可以可以發現,標准庫的代碼更加簡潔一些,不過兩者的賦值思路是相同的。

看官們,正文中就不寫代碼了,詳細的代碼放到了我的資源中,大家可以點擊這裡下載。下面是程序的運行結果,請大家參考:

The old string is:-?_??w?               //沒有初始化時輸出亂碼
The setted string is:aaaaaaaaaaaaaaaa     //標准庫函數初始化後的結果
The setted string is:bbbbbbbbbbbbbbbb     //DIY函數初始化後的結果

各位看官,關於字符串初始化函數的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved