标准C函数,返回字符串的长度。
std::string 的 strlen(str.c_str()) 和 str.length() 之间的区别
作为一种隐含的理解,我一直认为 std::string 的每个实现都必须满足每个字符串 str 的 strlen(str.c_str()) == str.length() 。 C++ 标准是什么...
strlen()属于哪个库? 它属于cstring吗?或字符串? 我尝试了以下代码,它确实有效: 包括 使用命名空间 std; //不包含 strlen()属于哪个图书馆? 它属于cstring吗?还是string? 我尝试了以下代码,它确实有效: include <iostream> using namespace std; //withou include<string.h> int main() { char * str="abc"; cout<<strlen(str); } 我将 str 设置为 3,并给出正确答案 3。 为什么它在不包含库字符串或 cstring 的情况下也能工作? 我应该在其中包含 cstring 还是 string ?字符串.h? strlen()属于哪个库?它属于cstring吗?还是字符串? 都不是。 cstring和string不是库,它们是头文件,定义了各种函数和类的接口。 C语言标准说strlen函数是在头文件<string.h>中声明的。 在 C++ 中,包含 <string.h> 将 strlen 放入全局命名空间,而包含 <cstring> 则将 strlen 放入 std 命名空间。 strlen函数的实际实现位于C标准库中(在某些平台上又称为libc或CRT)。 通常,它在链接时与您的可执行文件链接。 为什么它可以在不包含库字符串或 cstring 的情况下工作? 在您的特定编译器和工具链中,头文件<iostream>恰好包含<cstring>,这意味着包含前者的任何代码也可以免费获得后者。 这是一个实现细节,不应该依赖它——如果您使用另一个编译器编译代码,您可能会突然发现自己陷入了编译器错误的海洋中。 正确的做法是在此处也包含 <cstring>;即使您的特定编译器不需要它,但其他编译器可能需要它。 为了使用strlen(),您需要包含<cstring>头文件: #include <cstring> 这就是我一直在寻找的答案,但我在这里没有找到直接的答案。 函数strlen()在头文件<string.h>中声明。 来自 GNU C 库。 回顾一下,对于 C++11,将编译以下 2 个程序: #include <iostream> #include <cstring> // provides std::strlen() int main() { const char* cStyleString = "CStyleString"; std::cout << std::strlen(cStyleString) << std::endl; return 0; } 还有 #include <iostream> #include <string.h> // provides global strlen() int main() { const char* cStyleString = "CStyleString"; std::cout << strlen(cStyleString) << std::endl; return 0; } #include <iostream> #include <string.h> using namespace std; int main() { char *pointer1="Idle hands are the devil's workshop."; int length; length=strlen(pointer1); char *pointer2; pointer2=new char(length+1); strcpy(pointer2,pointer1); cout<<"pointer 2:"<<pointer2; delete[] pointer2; return 0; } #include <stdio.h> #include <string.h> int main(void) { char *string = "Hello World"; printf("%lu\n", (unsigned long)strlen(string)); return 0; } 该程序将打印值11,这是字符串“Hello World”的长度。字符串存储在数据类型为 char 的数组中。通过搜索数组中的第一个空字符来找到字符串的结尾。 来自 GNU C 库
基本上我试图获取参数的长度(使用strlen),但我不断收到此错误。根据我的理解,这意味着我给出了一个指向 char 数组的指针数组,而不是...
这样我就可以确认我所认为的事情是否真的发生了。当我将(26 个字母)字母表作为输入时,以下代码会打印出 25,是不是因为 fgets 总是自动...
这样我就可以确认我认为正在发生的事情是否真的发生了。当我将(26 个字母)字母表作为输入时,以下代码会打印出 25,这是因为 fgets 总是自动...
为什么编译器不优化循环中的 strlen() 调用,尽管它是一个纯函数? [[可重现]]会如何影响这一点?
我有两个将字符串转换为小写的函数。第一个在每次迭代中调用 strlen(),而第二个仅在修改字符串后调用它。我期望编译器
为什么strlen的值为5,但是当我在for循环中使用它时它立即变成4?
我的 strlen() 有问题。正如你所看到的 strlen() 输入是 5(我输入单词:hello)并分配给 lenght 变量。但是当循环开始时,它使用长度为 4,但是当我在循环内打印它时......
我有一个非常简单的代码: Secret[]="abcdefgh";//这是在不同的函数中声明的,并且是随机单词 int len=strlen(secret);//本例中为 8 字符字[len]; for(int a=0;a 我有一个非常简单的代码: secret[]="abcdefgh";//this is declared in different function and is random word int len=strlen(secret);//ofc it is 8 in this case char word[len]; for(int a=0;a<len;a++){//expecting this will put '_' at positions 0-7 word[a]='_'; } printf("%d %s",(int)strlen(word),word); 但是,strlen(word)返回11并且word包含"________� @",因此存在一些我看不到的明显内存泄漏。任何想法? 此字符数组由字符串文字初始化 secret[]="abcdefgh"; 有 9 个元素,因为它还包括字符串文字的终止零。所以上面的定义相当于 secret[9]="abcdefgh"; 函数strlen返回字符数组中终止零之前的元素数量。所以在这个声明中 int len=strlen(secret); 变量 len 由 8 初始化 作为结果声明 char word[len]; 相当于 char word[8]; 在这个循环中 for(int a=0;a<len;a++){//expecting this will put '_' at positions 0-7 word[a]='_'; } 数组的所有元素都设置为 '_'。 arry 没有终止零。因此,将函数 strlen 应用于数组具有未定义的行为。 您可以通过以下方式更改循环 int a = 0; for(;a<len - 1;a++){//expecting this will put '_' at positions 0-7 word[a]='_'; } word[a] = '\0'; 在这种情况下,函数 strlen 将返回数字 7,并且程序将是格式良好的。 您只需以 nul 终止字符串,将 len 加 1,然后以 nul 终止字符串。 #include <stdio.h> #include <string.h> int main(void) { char secret[]="abcdefgh"; int len=strlen(secret); char word[len+1]; for(int a=0;a<len;a++) { word[a]='_'; } word[a]=0; //or word[a]='\0' printf("%d %s",(int)strlen(word),word); return 0; } 关于内存泄漏,是的。 乍一看,您似乎忘记将 null 放在 char 数组(指针)的末尾。 根据我的经验,这会导致缓冲区溢出或堆栈损坏。 一增加一修改 字符字[len];需要用 char word[len+1] 更改; 添加一行 world[len] = ' ';在最后一个 printf 行之前。 就这样吧 没有空间容纳'\0'。 // "abcdefgh" // 01234567 您需要为 NUL 终止符定义带有空格的单词。 char word[len + 1]; // "abcdefgh" // 012345678 -- word[8] gets '\0'
我有一个使用 phorm 的旧网站。 提交表单后,我收到此错误: 警告:strlen() 期望参数 1 为字符串,数组在 /home/user/public_html/form/phorm.php 第 201 行给出...
为什么 C 函数 strlen() 返回错误的 char 长度?
我的C代码如下: char s=“MIDSH”[3]; printf("%d “,strlen(&s)); 运行结果是2,这是错误的,因为char s只是一个'S'。 有谁知道为什么以及如何解决这个问题
有没有PHP函数可以根据strpos和strlen打印子字符串?
我正在尝试获取从 MySQL 条目中获取的 $body 中的字符串之前和之后的单词。我能够在正文中找到关键字,获取其 strpos 和 strlen。 从那里我相信我应该是
我有一些代码,它接受一个文件,将每一行读入一个新的字符串数组(并向每个字符添加 128),然后将每个数组分配给一个指针数组,然后打印每个数组。当尝试时...
我是编程新手,所以我正在练习 C。然后我的代码遇到了问题: #包括 #包括 int main() { char a[] = "你好"; 原则...
用户输入清理程序,它采用特定数量的参数并将执行传递给 bash 脚本
我正在尝试编写一个小程序,它可以抵抗缓冲区溢出和类似的漏洞。 由于我们不能信任用户输入,我认为连接是个好主意......
将 null 传递给 string 类型的参数 #1 ($string) 已被弃用
切换到PHP8.1后,以下三个消息在我耳边飞扬: `已弃用:strlen():在 /var/www/html/fp-plug 中已弃用将 null 传递给字符串类型的参数 #1 ($string)...
当字符串中存在非英文字符时,Strlen 函数给出错误的长度
我有一个程序也接受非英语字符作为输入字段。因为我们使用了strlen,所以在计算字符串长度时,当存在...时,它无法给出预期的长度...
我有这个带有 MySQL 数据库查询的 PHP 代码,我想显示 MySQL 数据库中的记录,例如名字和姓氏记录,我只想显示像 php echo $row 这样的...
昨天我在面试,被要求在不使用任何标准函数的情况下用 C 语言实现 strlen(),全部用手实现。作为一个绝对的业余爱好者,我用 while 循环实现了原始版本。洛...
我可以指望我的编译器优化 const char * 上的 strlen 吗?
在我的 SAX xml 解析回调(XCode 4,LLVM)中,我做了很多调用 这种类型的代码: 静态 const char* kFoo = "酒吧"; 无效 SaxCallBack(char* sax_string,.....) { if ( strcmp(sax_st...
int v_1[10] = { -1,1000,2 }; 整数a; a = strlen(((char*)v_1 + 1)); 我无法理解为什么在这种特殊情况下“a”变量等于 5。 我也在努力理解...