[英]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.