strcpy 函数怎么传递string类型的?

gucheng789 2011-07-16 11:20:16


比如:
string a,b;

strcpy(a, b);

结果程序报错:
error C2664: “strcpy”: 不能将参数 1 从“std::string”转换为“char *”

请问include"string" 有没有类似的函数,?

不要 a = b;这样只是把首地址赋过去,我要把 b 的内容拷贝到 a;
...全文
1552 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
pamtry 2011-07-16
  • 打赏
  • 举报
回复
既然用c++的string,就应该转换思维方式,适应这种自动内存管理的模式

至少在实际应用中,需要用到LZ所说的这样的功能,一般都是设计失误,不妨把你想实现的目标发出来
辰岡墨竹 2011-07-16
  • 打赏
  • 举报
回复
LS那样可不行,c_str()是const的,所以是只读的。不能修改。而且试图用C风格的字符串函数直接操作动态的string,也是错误的。就像有些人把CString强制转换为LPTSTR然后修改其内容一样,因为没有扩充其内部缓冲区,很容易导致内存越界。
未注销 2011-07-16
  • 打赏
  • 举报
回复
string a, b;
strcpy(a.c_str(), b.cstr());
辰岡墨竹 2011-07-16
  • 打赏
  • 举报
回复
string是动态管理的,不要把它当作一块固定的缓冲区,用C的思想去管理。


string expansion(const string& exp_str, int n)
{
string s = exp_str;
s.append(n, '0');
return s;
}
辰岡墨竹 2011-07-16
  • 打赏
  • 举报
回复
没有问题啊,b = "123456"; 之后 b = "123456789"; string就是设计用来存储动态字符串的,完全不需要strcpy。strcpy是针对C风格的不可变长字符串的。


#include "stdafx.h"
#include <string>

int _tmain(int argc, _TCHAR* argv[])
{
using namespace std;

string a;
a = "123456";
cout << a << endl;
a = "123456789";
cout << a << endl;

return 0;
}


没任何问题啊。你是不是没有include <string>,注意它不应该在"stdafx.h"之前。如果你配置了使用预编译头文件,#include "stdafx.h"必须是第一句。
gucheng789 2011-07-16
  • 打赏
  • 举报
回复

哦,对了 expansion()函数会调用频繁!!!
KWDIWT 2011-07-16
  • 打赏
  • 举报
回复
string::assign
gucheng789 2011-07-16
  • 打赏
  • 举报
回复
大火看一看这个函数安全不?合理不?规范不?


string expansion( string exp_str, int n ) // 把 exp_str 扩大 10^n 倍 后返回结果
{
char r[81];
strcpy( r, exp_str.c_str() );
int np = exp_str.length();

for(int i = 0; i < n; i++)
{
r[np] = '0';
np++;
}

r[np] = '\0';
return r;
}
bruceteen 2011-07-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gucheng789 的回复:]
其实问题是这样的:

string b;
b = "123456";

现在我想把字符串“123456”增加长度,
但不能这样啊 b = "123456789"; 这样会报错。

所有我就声明一个 string a(10,'\0') 这是初始化10空间的字符串,每一个空间为'\0'

就像把 b 的内容先赋给 a, 然后再在a的后面填上“789”;

……
[/Quote]

string b = "123456";
b += "789";
gucheng789 2011-07-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 loaden 的回复:]
C/C++ code
#include <iostream>
#include <string>

int main()
{
std::string s("Hello World!");
char buf[100];
strcpy(buf, s.c_str());
std::cout << buf << std::endl;
return……
[/Quote]

s.c_str()是吧string转化为 char*;
那有没有吧 char* 转化为 string;的方法??
gucheng789 2011-07-16
  • 打赏
  • 举报
回复

其实问题是这样的:

string b;
b = "123456";

现在我想把字符串“123456”增加长度,
但不能这样啊 b = "123456789"; 这样会报错。

所有我就声明一个 string a(10,'\0') 这是初始化10空间的字符串,每一个空间为'\0'

就像把 b 的内容先赋给 a, 然后再在a的后面填上“789”;

有没有直接一点的方法把 b 的内容赋给 a ?/
「已注销」 2011-07-16
  • 打赏
  • 举报
回复
#include <iostream>
#include <string>

int main()
{
std::string s("Hello World!");
char buf[100];
strcpy(buf, s.c_str());
std::cout << buf << std::endl;
return 0;
}
某某9 2011-07-16
  • 打赏
  • 举报
回复
string.c_str();
jeans_liu 2011-07-16
  • 打赏
  • 举报
回复
你用strcpy也是copy的地址啊!
a=b;
智能输出会自动解析的 std::cout<<a;
输出的内容a与b是一样的
strcpy一般用于C式字符串
你可以先计算b的长度再申明数组char a[];
之后就可以用strcpy了,不过此时传递的也是指针啊?
以上只是我的见解!!
「已注销」 2011-07-16
  • 打赏
  • 举报
回复
a = b;
不就行了?
gucheng789 2011-07-16
  • 打赏
  • 举报
回复

c_str属性??

怎么用额?

给个例子嘛
bdmh 2011-07-16
  • 打赏
  • 举报
回复
类型不一样,较什么劲,对于string类型,有个 c_str属性,你可以加以利用
内容概要:本文围绕不确定环境下的多式联运路径优化问题展开研究,提出并实现了基于AFO算法、遗传算法(GA)和粒子群优化算法(PSO)的三种智能优化方法,并借助Matlab平台完成算法编程与仿真。研究构建了考虑时间、成本、转运风险等多重不确定因素的路径优化模型,系统比较了AFO、GA、PSO三种算法在收敛速度、全局寻优能力和稳定性方面的表现,同时引入Matlab自带的全局优化搜索器作为基准对照,深入分析各算法在复杂物流网络中的适用边界与性能差异。研究表明,AFO算法在解决此类组合优化问题时展现出更快的收敛效率和更强的局部规避能力。; 适合人群:具备一定Matlab编程基础与运筹优化知识,从事物流工程、交通运输规划、智能算法开发等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于多式联运、综合货运网络中的路径决策支持系统构建;②为不确定性条件下复杂路径规划问题提供智能算法选型依据与技术实现方案;③支持科研人员复现主流优化算法并开展横向性能对比实验,推动算法改进与实际落地。; 阅读建议:建议读者结合提供的Matlab代码逐模块分析算法实现流程,重点理解目标函数设计、约束条件处理及参数敏感性分析部分,可通过调整问题规模与算法参数进行对比实验,进一步拓展至动态路径规划或大规模网络优化等延伸场景。
内容概要:本文研究了基于QLearning自适应强化学习的PID控制器在自主水下航行器(AUV)运动控制中的应用,通过Matlab代码实现了控制算法的仿真验证。该方法融合强化学习的在线自适应能力与传统PID控制的稳定性优势,利用QLearning算法动态优化PID控制器的比例、积分、微分参数,以应对水下复杂流体环境、模型不确定性及外部干扰等挑战,从而提升AUV轨迹跟踪的精度、鲁棒性与动态响应性能。文中系统阐述了AUV的六自由度非线性动力学建模过程、QLearning算法的状态空间与动作空间设计、奖励函数构造及训练机制,并详细说明了PID参数自整定的闭环控制架构。仿真结果表明,相较于传统固定参数PID控制器,该智能控制策略在多种工况下均展现出更优的控制效果,有效抑制了超调,加快了响应速度,并增强了抗干扰能力。; 适合人群:具备自动控制理论、强化学习基础及Matlab/Simulink仿真能力,从事水下机器人、智能控制、海洋工程、自动化等领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于AUV、UUV等无人水下平台的高精度自主导航与运动控制;②为解决非线性、强耦合、时变系统的控制器参数自适应整定问题提供智能化解决方案;③作为强化学习与经典控制理论深度融合的技术范例,推动智能控制算法在海洋装备中的工程化应用。; 阅读建议:建议读者结合提供的Matlab代码深入理解算法实现细节,重点剖析QLearning的状态-动作-奖励机制设计、PID参数更新逻辑及仿真对比实验结果,有条件者可在更复杂的动力学模型或实际硬件平台上进一步验证与优化算法性能。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧