C++ string 数组 用strcpy怎么出不来?

1 #include <iostream>
2 #include <string>
3 using namespace std;
4 int main()
5 {
6
7 string sr[3]={"ddf","bcd"};
8 string s[3];
9 strcpy(s,sr);
10
11 cout<<s[0]<<endl;
12
13 return 0;
14 }
~
报错:
2.cpp:9: error: cannot convert `std::string*' to `char*' for argument `1' to `char* strcpy(char*, const char*)'
看不懂。

问题2。如何定义string型数组指针啊。。。这程序我是想这样做
1 #include <iostream>
2 #include <string>
3 using namespace std;
4 int main()
5 {
6
7 string *sr[3]={"ddf","bcd"};//报错
8 string s[3];
9 strcpy(s[0],*(sr));
10 strcpy(s[1],*(sr+1));
strcpy(s[2],*(sr+2));
11 cout<<s[0]<<s[1]<<s[2]<<endl;
12
13 return 0;
14 }
~
怎么能出来。。顺便讲解一下strcpy怎么复制string数组啊。。

1.string和char*是不同的。string是智能字符串,这种类型的变量是一个对象,不是一个简单的char指针。它已经重载了“赋值”运算符,因此要赋值直接s[0] = sr[0];s[1] = sr[1];等等即可。

2.string*可不是string,怎么能给string*赋一个{"ddf","bcd"}这样的东西呢?必须先
string sr[3]={"ddf","bcd"};
然后
string* psr = sr;

总之,string更像int、float,而不是char[]。strcpy是C语言时代的C风格字符串的复制函数,仅适用于char[],不适用于C++的string类。
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-11-20

拷贝一个string 数组不能用strcpy函数,自己写一个嘛,很简单的,用for循环来实现,大致思路是生命另一个数组,用for循环遍历string数组,将值赋给另一个数组。

第2个回答  推荐于2018-05-10
C++ string 是类,strcpy是C的字符串操作函数,当然不行, 可用c_str()转成以0结尾的C字符串才可用本回答被网友采纳
第3个回答  2015-11-13
string 不能和const char * 混用的.
string 的好处是提供了丰富的函数接口,便于你对字符串内容进行分析.查找.切割.替换等复杂操作.
因此代码里如果有定义常量字符串的需求的话.最好使用const char 比如:
const char cc1[]="hello";
const char* cc[3]={"tom","jerry","disney"};
而别用string来定义常量.
另外针对第二题. 请不要对string 使用 一般的 strcat ctrcpy等函数.这些函数最好用于一般的char[] 数组
而对string, 应当使用他自己的配套函数
例如
s4=s1;
s1=s2+s3;
s2=s1.substr(2,4);
s3.erase(4,2);
第4个回答  2007-01-27
2楼的说的对,string这个东西的拷贝,查找,合并等操作非常方便,并且安全效率高;
不过 string *psr = sr; 这句不是拷贝一个字符串数组,psr本身没有对象实例,只是指向sr数组实例的指针

VS2013 C++中的strcpy用不了,说换成strcpy_s,还是出现错误了。_百度...
这是因为常量字符串不能被修改。你的程序会运行错误。至于修改成strcpy_s,这只是增强了函数的安全,并不改变strcpy函数的要求。strcpy_s函数的原型是:strcpy_s( char *strDestination, size_t numberOfElements, const char *strSource );第二个参数是strDestination字符串的大小,用意是控制...

一个C++中string命令的问题(菜鸟级)
这是cout的函数特性造成的:因为直接写cout<<array3;的话,array3被当做一个指针,指向一个字符串,那么cout函数就会顺着这个地址一直走下去,并且输出地址所指向的值,直到程序异常结束为止。你用个循环输出数组的值,防止越界,这是common sense。

c++的strcpy的问题
第一,strcpy包含在头文件string.h中。第二,char *ch;\/\/这里定义了一个字符指针变量ch ch="sdgsdfgfd\\n";\/\/错误。"sdgsdfgfd\\n"是一个字符串常量,因而不能复制给ch。但可以这样,char *ch="sdgsdfgfd\\n";在定义时,对ch进行初始化,这条语句的意思是为字符 串 常量"sdgsdfgfd\\n"分配内...

学c++遇到的关于strcpy的问题
strcpy(chsr* des, const char* src);是一个函数,要求的参数是两个字符指针(char*),而你的str的类型是一个string类,所以类型不匹配,str.data() 的类型是一个指针,类型匹配

C++strcpy的问题。
strcpy()的两个形参是两个字符指针,不是两个字符。第一个开参一般为一个字符数组;如:char a[32] = “world”, char *s = "hello";strcpy(a, s);是把s为首地址的字符串复制到数组a中。但是你如果这么写strcyp(s, a)就会出错。因为s只是字符串的首地址,没有空间。不懂还可继续问。

c++字符串数组问题?
C语言是不能用 = 对数组进行赋值的。定义数组时候初始化使用 = , 但这里不能理解成赋值,因为这是编译器在编译的时候进行处理的。赋值预计在编译时候报错C2106(运算符的左操作数必须为左值)。因此C对于字符串的赋值只能通过两种方式:1,strcpy,这是一个内存拷贝类的函数 2,循环赋值,像一个常规...

为什么我这个strcpy在devc++运行时会出错
"dljfdfdfdf";这个字符串存在文本常量区,不可以改变.而你后面的操作对它进行了改变.编译器不会发现这个错误,只能在运行时候出现.char a[6] = "aaaaa";char *b = "hello";改成这样就可以了.对数组A初不初始化都可以.当然要注意数组a的大小.要能容得下b中的元素,别忘记了还有一个'\\0'....

c++中strcpy问题,请高手指点,谢谢啦。
strcpy(str,"中国人");\/\/str指向它,但是,这个位置既然是常量,当然就不能赋值了。第二段:和第一段一样的道理。第三段:char *str;char str2[20];str=str2;\/\/str重新指向了,一个有20个字符大小的字符数组开头位置 strcpy(str,"我是中国人");\/\/所以,将“我是中国人”这个字符串,赋值...

为什么调用strcpy是不能自身copy到自身?不明白为什么会出现RE...看原 ...
void __fastcall TForm1::Button1Click(TObject *Sender){ char buf[20];strcpy(buf,buf);} 这是C++BUILDER6.0,自已复制自已没出错,主要还是怕重叠区造成的尾0 覆盖导到处的出错,有的C++编译程序就故意做了限制而已,这是人为的。而C++BUILDER6.0 就不做任何限制;...

c++,为什么strcpy()过长的string到长度不足的char数组中,照样可以正...
函数原型声明:extern char *strcpy(char* dest, const char *src);说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。如果dest空间不足以容纳src,编译器也不会自动为其增加长度,会把 dest以后 的内存数据覆盖,看似“一切正常”,但是潜藏很大危险,易导致缓冲区溢出。...

相似回答