Tag: strlen

C字符串,strlen和Valgrind

我试图理解为什么Valgrind正在吐痰: ==3409== Invalid read of size 8 ==3409== at 0x4EA3B92: __GI_strlen (strlen.S:31) 每当我在动态分配的字符串上应用strlen时? 这是一个简短的测试用例: #include #include #include int main() { char *hello = “Hello World”; char *hello2; /* Step 1 */ printf(“Step 1\n”); printf(“strlen : %lu\n”,(unsigned long)strlen(hello)); /* Step 2 */ hello2 = calloc(12,sizeof(char)); hello2[0] = ‘H’; hello2[1] = ‘e’; hello2[2] = ‘l’; hello2[3] = […]

strlen性能实现

这是一个多function问题: 这与glibc strlen实现相比如何? 有没有更好的方法来实现这一点和自动向量化。 随机填充垃圾,因为stackoverflow以某种方式比我更了解代码到汇总比率 #include #include #include #include #include #include /* 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 […]

快速的问题

我来打扰你们所有人可能都是非常简单的C问题。 使用以下代码: int get_len(char *string){ printf(“len: %lu\n”, strlen(string)); return 0; } int main(){ char *x = “test”; char y[4] = {‘t’,’e’,’s’,’t’}; get_len(x); // len: 4 get_len(y); // len: 6 return 0; } 2个问题。 为什么他们不同,为什么是6? 多谢你们。 编辑:对不起,我知道会解决什么,我只是想了解发生了什么。 那么strlen只是继续转发这个点,直到找到一个\ 0? 此外,当我在主函数中而不是在get_len函数中执行strlen时,两者都是4.那只是巧合吗?

在循环条件中使用strlen()比仅检查null字符更慢吗?

我已经读过使用strlen比这样的测试更昂贵: 我们有一个长x 100个字符的字符串。 我觉得 for (int i = 0; i < strlen(x); i++) 比这段代码贵: for (int i = 0; x[i] != ‘\0’; i++) 这是真的吗? 也许第二个代码在某些情况下不起作用,所以最好使用第一个代码吗? 下面会更好吗? for (char *tempptr = x; *tempptr != ‘\0’; tempptr++)

strlen:它是如何工作的?

strlen()如何在内部工作?

strlen – 字符串的长度有时会增加1

我正在做一些C拼图问题。 在大多数情况下,我能够找到正确的答案,但有了这个答案,我遇到了问题。 我通过使用编译器知道正确的答案,但我不知道原因。 看看代码: char c[] = “abc\012\0x34”; strlen(c)会使用标准C编译器返回什么? 当我期望的是3时,我的编译器返回4。 我认为是strlen()会搜索第一次出现的NULL字符但不知何故结果是比我预期的多一个。 知道为什么吗?

strlen没有检查NULL

为什么strlen()没有检查NULL? 如果我做strlen(NULL) ,它会出错。 试图了解它背后的基本原理(如果有的话)。