C++ 无法将字符串复制到字符数组 #包括 拉维级 { 私人: 字符a[10],字符b[10]; 公众: void setdata(字符x[10],字符y[10]) { a=x;b=y; } 无效显示() { std::cout
使用C++ 无法将字符串复制到字符数组 #包括 拉维级 { 私人: 字符a[10],字符b[10]; 公众: void setdata(字符x[10],字符y[10]) { a=x;b=y; } 无效显示() { std::cout,c++,arrays,string,class,setter,C++,Arrays,String,Class,Setter,使用string.h中的strcpy函数: #include<iostream> class ravi { private: char a[10],char b[10]; public: void setdata(char x[10],char y[10]) { a = x; b = y; } void show() { std::cout << a << b;
string.h
中的strcpy
函数:
#include<iostream>
class ravi
{
private:
char a[10],char b[10];
public:
void setdata(char x[10],char y[10])
{
a = x; b = y;
}
void show()
{
std::cout << a << b;
}
};
int main()
{
ravi r;
r.setdata("text","copied");
r.show();
}
#包括
void setdata(字符x[10],字符y[10])
{
strcpy(a,x);
strcpy(b,y);
}
>字符串> C++中的字符串。使用char数组、又名C字符串、NUL终止字符串等,这些操作更难操作。
只需更换a
和b
的类型(并对setdata
的参数稍加改进),您就可以获得一些有用的功能,以及字符串的一些有用功能:
#include <string.h>
void setdata(char x[10],char y[10])
{
strcpy(a,x);
strcpy(b,y);
}
对于C++17,最好使用以下参数类型代替常量字符*
:
void setdata(std::string const& x, std::string const& y)
数组没有复制赋值运算符
void setdata(std::string_view x, std::string_view y)
无效
使用标准C++函数<代码> StrcPy < /C>或<代码> STRNCPY 在标题>代码> /COD>中复制字符数组。C++中的字符串文字也有固定字符数组的类型。因此,成员函数<代码> SETDATABO/<代码>的参数应用限定符<代码> const
>声明。< /P>
a=x;b=y;
考虑到这句话是无效的
void setdata( const char x[], const char y[] )
{
strncpy( a, x, sizeof( a ) );
a[sizeof( a ) - 1] = '\0';
strncpy( b, x, sizeof( b ) );
b[sizeof( b ) - 1] = '\0';
}
要么你应该写信
char a[10],char b[10];
或
C++中的字符串是“代码> STD::Acstring,NUL终止字符串等。C字符串不是这样工作的。试试使用<代码> STD::String < /Cord>并将自己保存在Hasle中。使用字符串< A、B:<代码> >而不是<代码> char A(10)、B(10);< <代码> >更改<代码> SETDATABAS/COD> > <代码>无效SETATA数据。(常量标准::字符串和x,常量标准::字符串和y)
。别忘了#包括
。这比使用C字符串好得多。你知道什么是构造函数吗?为什么不使用strcpy\u s
?strcpy
不应该再使用了……如果你能解释一下为什么他所做的不起作用,那也会很好。更好的解决方案是用std::string
“数组没有复制赋值运算符。”std::array
有复制赋值运算符,这是它通常优于普通数组的各种原因之一。这并不仅仅是解决OP假设的问题。@下划线\u d std::array不是数组。它是用户定义的容器。“阵列没有复制分配运算符。"当它们到达那个语句时,它们不是退化为指针吗?@VladfromMoscow事实上,我没有说它是一个数组。但不管怎样,我这么说的原因很明显,因为用户定义的容器在很多方面都被认为是数组,而迂腐的语言是没有用的。@下划线\u你只会把读者和你的无关者混淆注释。我并不总是很重视字符串视图,但你一定喜欢这样一个事实,即现在只需要一个函数就可以接受所有变量的纯字符字符串,而不必强迫调用方使用c_str
或分配什么。@StoryTeller如果我没弄错的话const std::string&
也会接受所有变量。请更正如果我错了,请告诉我。@Everyone“没有[…]分配或什么都没有”将char*
等传递给string
构造函数将从中构造string
,这(除非SSO优化)这将意味着分配,只是为了得到一些只用于单个调用的东西。@从本质上讲,它是做这项工作的,但是需要更多的空间和周期(对于比SSO的能力更大的字符串)。无论如何,谢谢你的提示,我将使用<代码> STD::String视图V/代码>从现在起。@ YSC“C++中的字符串是STD::String。”这是完全错误的说法。
char a[10],char b[10];
char a[10]; char b[10];
char a[10], b[10];