Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.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++ Strcat,指针的2个字符数组_C++_Arrays_Pointers_Char_Strcat - Fatal编程技术网

C++ Strcat,指针的2个字符数组

C++ Strcat,指针的2个字符数组,c++,arrays,pointers,char,strcat,C++,Arrays,Pointers,Char,Strcat,我有这样的函数,它得到2个数组作为char参数,我需要合并这些字符串。对不起,这个问题很简单 void Abc (char **a, char **b) { for (int i = 0; i < 200; i++) { a[i]="hello "; } for (int i = 0; i < 200; i++) { strcat(a[i], b[i]); //doesn't show m

我有这样的函数,它得到2个数组作为char参数,我需要合并这些字符串。对不起,这个问题很简单

    void Abc (char **a, char **b)
{

    for (int i = 0; i < 200; i++)
    {
        a[i]="hello ";
    }

    for (int i = 0; i < 200; i++)
    {
        strcat(a[i], b[i]);       //doesn't show mistake, but it's there
        cout << b[i]<<'\n';        //ok
        cout << a[i]<<'\n';        //ok
        cout<<strlen(b[i])<<'\n';  //ok
        cout<<strlen(a[i])<<'\n';  //ok
    }
}
void Abc(字符**a,字符**b)
{
对于(int i=0;i<200;i++)
{
a[i]=“你好”;
}
对于(int i=0;i<200;i++)
{
strcat(a[i],b[i]);//没有显示错误,但它在那里

cout问题在下面的陈述中

a[i]="hello ";
您没有复制字符串文字,而是指定其地址

改用

strcpy( a[i],"hello " );

首先,每个
a[i]
都指向一个字符串文本,修改它会调用未定义的行为

第二,当您使用strcat(x,y)
时,您应该确保
x
有足够的空间来存储合并的
x
y


因此,
x
应该已经分配了内存,要进行双重检查,您应该使用
strncat
以避免意外溢出。

以下是问题的根源:

for (int i = 0; i < 200; i++)
{
    a[i]="hello ";

需要三个参数。如果我使用strcat,它也不起作用。您不能修改字符串文字。最好是指向字符串文字
const char*
,并且是C++11标准所要求的。如果“a”指向可以容纳字符串“hello”的对象strcat之后的结果字符串通过在第一个循环中重新指定为“hello”,有效地破坏了这种可能性。
for (int i = 0; i < 200; i++)
{
    strcpy(a[i], "hello ");
}