这是一个多功能问题:
随机填充垃圾,因为stackoverflow以某种方式比我更了解代码到汇总比率
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <stdbool.h>
#include <stdlib.h>
/* Todo: Document */
#define WORD_ONES_LOW ((size_t)-1 / UCHAR_MAX)
#define WORD_ONES_HIGH (((size_t)-1 / UCHAR_MAX) << (CHAR_BIT - 1))
/*@doc
* @desc: see if an arch word has a zero
* #param: w - string aligned to word size
*/
static inline bool word_has_zero(const size_t *w)
{
return ((*w - WORD_ONES_LOW) & ~*w & WORD_ONES_HIGH);
}
/*@doc
* @desc: see POSIX strlen() …Run Code Online (Sandbox Code Playgroud) 我正在查看glibc 的 strlen的来源。他们用来magic bits求字符串的长度。有人可以解释一下它是如何工作的吗?谢谢
我正在尝试理解string.h函数.这是我自己的strncpy()实现
char * my_strncpy(char *dst, const char* src, int n)
{
char *orig = dst;
const char *hold = src;
int count = 0, remain = 0;
while(*(hold++))
count++;
if ( n > count )
{
remain = n - count;
n = count;
}
while(n--)
*dst++ = *src++;
while(remain--)
*dst++ = '\0';
return orig;
}
Run Code Online (Sandbox Code Playgroud)
但是在看这里的 glibc实现时,我想知道为什么它太大而复杂.
我使用" time "命令测试了执行时间.两个功能几乎相同.
有人可以分享关于glibc strncpy()的知识以及我在my_strncpy()中缺少的知识.
如果有人想尝试在 中重写字符串函数C,这段代码是否可以替代标准strlen()函数?我一直无法运行此代码,因为我坐在车里用 iPhone 打字。
int strlen(char * s) {
int i = 0, sum = 0;
char c = s[0];
while(c != '\0') {
sum++;
c = s[++i];
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
非常感谢您的反馈!
我想知道字符串操作函数是如何在内部实现的,所以我可以弄清楚它们的性能.有没有办法找到这个?
我在谈论C语言中以null结尾的c字符串(字符数组)和相关函数(strcat等),如果它与它有任何关系.