为啥 int i=strlen(st)会报错?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥 int i=strlen(st)会报错?相关的知识,希望对你有一定的参考价值。

[Error] cannot convert 'std::string aka std::basic_string<char>' to 'const char*' for argument'1' to 'size_t strlen[const char*]'
错误信息
弄不明白为什么,,,头文件cstring也加了啊
嗯,,,我知道程序里面肯定有很多不通的地方,,,我仅仅是想知道 i=strlen(st)究竟错在哪里而已,,,

  错误原因在于st是一个std::string类型的变量,而strlen要求的参数是char*类型的

  如果要获取st字符串的长度,std::string自带一个size接口可以满足需求

  如果仍要继续使用strlen,则可以使用std::string的c_str接口。该接口返回一个const char*指针,正好可以作为参数传递给strlen

  示例代码如下:

std::string st;
cin>>st;
int i = st.size();
printf("str size is:%d\\n",i);
i = strlen(st.c_str());
printf("str size is:%d(by strlen)\\n",i);

参考技术A [Error] cannot convert 'std::string aka std::basic_string<char>' to 'const char*' for argument'1' to 'size_t strlen[const char*]'
错误提示不是说的很清楚了吗? 传参格式不对
因为你的st是一个类,而不是字符串数组,就像你定义一个结构变量struct name bb; bb只是一个结构变量,而不是char *类型(因为strlen函数的原型为size_t strlen(const char *string)),也不是一个指针,所以不能这么传参数。本回答被提问者和网友采纳
参考技术B 使用某个函数之前:
1,这是一个库函数,必须包含库#include<string>
2,他的参数,是char*,即地址。
3,他的返回值。
参考技术C 是不是没有加头文件#include<string>
若不是,还需要你具体说下报错信息
参考技术D 把代码贴出来!追问

,,,为什么呢,,,

追答i = strlen(str.c_str());
如果还报错!则把头文件改成#include<string>

为啥我的 SQL 存储过程在没有结果时会报错?

【中文标题】为啥我的 SQL 存储过程在没有结果时会报错?【英文标题】:Why does my SQL stored procedure give an error when no result?为什么我的 SQL 存储过程在没有结果时会报错? 【发布时间】:2019-03-22 16:53:07 【问题描述】:

我正在尝试制作一个简单的存储过程,如果某个参数 (pFirstPosition) 是某个值,我会使用其他一些参数作为过滤器进行选择。 SELECT 仅在至少有一行时才起作用。问题是没有行时返回 null 而不是返回错误。我正在将 MariaDB 与 phpMyAdmin 一起使用,我遇到的错误是

静态分析:

在分析过程中发现了 1 个错误。

缺少表达式。 (位置 25 附近的“ON”) SQL查询:

SET FOREIGN_KEY_CHECKS = ON;

MySQL 说:

#2014 - 命令不同步;你现在不能运行这个命令

这是我的存储过程:

BEGIN
IF pFirstPosition = 'Top' THEN
   SELECT Leader,GameMode,Language.Name,MinRank,MaxRank from Lobby
   inner join Lobby_Position on Lobby.LobbyPositionId =
Lobby_Position.LobbyPositionId
   inner join Language on Lobby.LanguageId = Language.LanguageId
   WHERE Lobby.MinRank <= pUserRank
   AND Lobby.MaxRank >= pUserRank
   AND Language.Name = pLanguage
   AND GameMode = pGamemode;
End IF;
End

谢谢

【问题讨论】:

你不能在查询中使用BEGINIF,它们只能在存储过程和触发器中使用。 SET FOREIGN_KEY_CHECKS = 1 @Barmar 抱歉,我说的是查询,但它在存储过程中。就像我说的,它可以工作,除非它什么都不返回,这会引发错误 @FrankerZ FOREIGN_KEY_CHECKS 已经设置为 1 (ON),我尝试了我的存储过程,将其关闭,但它并没有真正改变任何东西 您不能将其设置为开启。 1 = 开,0 = 关 【参考方案1】:

“LANGUAGE”是保留字,所以用反引号引用:

   inner join `Language` on Lobby.LanguageId = Language.LanguageId

【讨论】:

我试过了但没有任何改变,我发现在PHP中调用它仍然有效,所以我认为这是一个phpmyadmin的问题 向 phpmyadmin 提交错误报告。【参考方案2】:

显然是 phpmyadmin bug that got fixed recently

【讨论】:

以上是关于为啥 int i=strlen(st)会报错?的主要内容,如果未能解决你的问题,请参考以下文章

c++中迭代器的问题为啥这样会报错?

倍增法与st

C语言中关于结构体指针为啥不能在函数内赋初值的问题?

第三周 四则运算

HDU 5875 st+二分区间

为啥使用 st_intersection 而不是 st_intersects?