Tag: strlen

对于以null结尾的字符串,strlen有时等于sizeof

我知道strlen计算直到(并排除)空字符’\0′ (或0 )的字符数,并且sizeof给出了存储字符串所需的空间量,包括空字符,但与输出混淆我的代码 题: 我希望strlen的结果始终比sizeof的结果小1,因为我的字符串是以null结尾的,但只有长度为4和8的字符串似乎是这种情况,不包括’\ 0’(即第3个字符串)以及第5个结果)。 我怀疑在第一,第二和第三结果的字符串末尾打印垃圾的原因相同。 有人可以解释这种行为吗? 我读了这个相关的问题,但我不认为这就是这里发生的事情: strlen – 字符串的长度有时会增加1 。 代码的作用: 在main ,它创建一个整数make_and_print_msgs和8的数组。然后对于每个长度,它调用函数make_and_print_msgs : 创建一个长度为+ 1的字符串(对于空字符),例如,对于长度为4,创建字符串“aaaa \ 0” 使用printf %c逐字母打印消息 使用printf %s其打印为字符串 找到字符串的strlen 找到字符串的sizeof 输出: i data_length[i] ——————– 0 0 msg intended to be: msg printed as string: strlen(msg): 1 sizeof(msg): 1 1 2 msg intended to be: aa msg printed as […]

如何确定字符串的长度(不使用strlen())

size_t stringlength(const char *s) 使用此函数,如何找到字符串的长度? 我不是指使用 strlen() ,而是创建它。 任何帮助是极大的赞赏。

单个字符上的Strlen函数行为

这是我的代码: void func(char c) { char * ptr = &c; size_t len = strlen(ptr); printf(“len – %d\n”, len); } len始终打印为1。 strlen(..)通过在结尾处找到空字符( \0 strlen(..)来确定char数组的长度。 这里ptr仅使用单个字符的地址( c )进行初始化。 c不包含任何空字符。 ptr如何获得长度?

Valgrind在简单C字符串函数上的错误

让我们考虑一下这个简单的测试程序: #include #include int main(int argc, char *argv[]) { char buf[256]; int i; strcpy(buf,”Hello world!”); i = strlen(buf); printf(“Length of string is %d.\n”,i); return 0; } 在使用英特尔c ++编译器进行编译并打开优化(O3)时,我从valgrind得到以下错误: ==8727== Conditional jump or move depends on uninitialised value(s) ==8727== at 0x4009EF: main (strtest.cpp:11) ==8727== Use of uninitialised value of size 8 ==8727== at 0x4FC61ED: _itoa_word (in […]

当strlen产生分段错误时,来自GetString()的C字符串

我在C中运行程序。当我运行程序时,我得到了分段错误错误。 在我回溯时它在gdb中告诉我 程序接收信号SIGSEGV,分段故障。 __strlen_sse2_bsf()at ../sysdeps/i386/i686/multiarch/strlen-sse2-bsf.S:51 51 movdqu(%edi),%xmm1 我相信它与strlen有关。 我使用strlen的唯一一次是: string s = GetString(); int stringlength = strlen(s); 当我更改strlen for sizeof错误停止时。 我的代码出了什么问题? GetString的文档 /* * Reads a line of text from standard input and returns it as a * string (char *), sans trailing newline character. (Ergo, if * user inputs only “\n”, returns “” not […]

为什么我不能得到整个字符串的长度?

我试过strlen(字符串)。 我尝试编写代码来查找整个字符串的长度。 然而,当达到第一个“空间”时,它仍然倾向于停止计算长度。 为什么会这样? 解决办法是什么? 我试图停在’\ 0’。 这不应该工作吗? 这是代码的一部分。 int main(void) { char phrase[256]; char phrase2[256]; int i,j,size; scanf(“%255s”, phrase); for(i=0;phrase[i]!=’\0′;i++){ size++; } …

strlen没有给出正确的字符串长度C.

我正在从我的字典中读取并打印出单词+单词的长度以用于测试目的。 我使用strlen来获取字符串的长度。 但是,我得到的数字不正确。 我相信strlen不计算\ 0字符。 我正在读字典中的前10个单词。 我的预期输出应该是: W:AL:1 W:A’s L:3 W:AA’s L:4 W:AB’s L:4 W:ABM’s L:5 W:AC’s L:4 W:ACTH’s L:6 W:AI’s L:3 W:AIDS’s L:6 W:AM’s L:4 但这就是我得到的(请注意L:如何在另一条线上。我认为这就是问题所在): W:A L:2 W:A’s L:4 W:AA’s L:5 W:AB’s L:5 W:ABM’s L:6 W:AC’s L:5 W:ACTH’s L:7 W:AI’s L:5 W:AIDS’s L:7 W:AM’s L:5 以下是我的代码: FILE* dict = fopen(“/usr/share/dict/words”, “r”); //open the […]

strlen是否为二进制和ascii数据返回相同的值

请找到以下代码段。 unsigned char bInput[20]; unsigned char cInput[20]; 从函数中,我在bInput获得二进制数据,并使用strlen(bInput)确定其长度。 我将bInput转换为二进制转换为ASCII并存储在cInput并打印其长度。 但两者都不同。 我是编程新手。 请指导其行为。

strlen如何计算c中的unicode

我很好奇strlen如何计算C中多个字节的unicode字符。 是否计算每个字节或字符(因为它们可以包含几个字节),直到第一个’\ 0’?

为什么重新实现strlen作为循环+减法?

受到关于SQLite3的以下代码的这个问题的启发: static int strlen30(const char *z){ const char *z2 = z; while( *z2 ){ z2++; } return 0x3fffffff & (int)(z2 – z); } 这附带一条提交消息,说这个函数有助于int溢出。 我对这部分特别感兴趣: const char *z2 = z; while( *z2 ){ z2++; } 对我来说,这个循环前进到z2直到z2指向null终止符。 然后z2-z产生字符串长度。 为什么不对这部分使用strlen()并重写如下: return 0x3fffffff & (int)(strlen(z)); 为什么使用循环+减法而不是strlen() ? 什么可以循环+减法做什么strlen()不能?