Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法将字符串复制到字符数组 #包括 拉维级 { 私人: 字符a[10],字符b[10]; 公众: void setdata(字符x[10],字符y[10]) { a=x;b=y; } 无效显示() { std::cout_C++_Arrays_String_Class_Setter - Fatal编程技术网

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];