簡體   English   中英

了解 C 編程中函數 strlen 的代碼

[英]Understanding code of function strlen in C Programming

我得到了在 C 編程中重新創建函數 strlen 的問題的解決方案,如下所示,我需要幫助理解代碼的實際作用。

void    *ft_memset(void *b, int c, size_t len)
{
    size_t i;

    i = 0;
    while (i < len)
    {
        ((unsigned char *)b)[i] = c;
        i++;
    }
    return (b);
}

我最大的疑問是((unsigned char *)b)[i] = c的含義,特別是因為我不理解( *)b ,以及在void函數中返回b的需要。

非常感謝您的幫助,如果我在堆棧溢出的第一篇文章中做錯了什么,我深表歉意。

讓我們分解一下,盡管我的 C 技能有些生疏。 歡迎編輯:)

void    *ft_memset(void *b, int c, size_t len)
{
    size_t i;

    i = 0;
    while (i < len)
    {
        ((unsigned char *)b)[i] = c;
        i++;
    }
    return (b);
}

首先,您聲明了一個名為ft_memset的函數,它返回void *

void *表示指向任何對象的指針。 它只是一個數字,指向一個內存地址。 但我們不知道其中的內容,因為它沒有正確注釋。

你的函數接受三個參數: b是一個指向任何東西的指針(或者如果你願意的話,也可以是 void 指針) c是一個int 32 位有符號整數。 len是一個size_t ,通常是無符號整數的別名。 在此處閱讀有關size_t的更多信息


您的函數遍歷前len個字節並將c的值設置為這些字節。

我們基本上覆蓋了b的前len個字節的內容。


現在, ((unsigned char*)b)是什么意思。 該語句將您的void *轉換為unsigned char* (字節指針),這只是告訴編譯器我們將處理b指向的內容,就好像它們只是一個unsigned char一樣。

稍后我們只是在第i個位置建立索引並在其中設置值c

理解函數strlen的代碼

void *ft_memset(void *b, int c, size_t len)就像void *memset(void *s, int c, size_t n) 它們都將值分配給b指向的內存。 這些函數與strlen()完全不同。

size_t strlen(const char *s)不會改變s指向的內存。 它遍歷該內存以查找空字符

size_t strlen(const char *s) {
  const char *end = s;
  while (*end != '\0') {
    end++;
  }
  return (size_t)(end - s); 
}

// or

size_t strlen(const char *s) {
  size_t i = 0;
  while (s[i] != '\0') {
    i++;
  }
  return i; 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM