C++ Strcat,指针的2个字符数组
我有这样的函数,它得到2个数组作为char参数,我需要合并这些字符串。对不起,这个问题很简单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
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 ");
}