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;
...全文
1190 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属性,你可以加以利用

65,176

社区成员

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

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