【发布时间】:2021-09-18 16:58:25
【问题描述】:
我正在尝试实现我的strcat 版本。但是,我收到以下警告,并且我的代码在运行时崩溃。我从 main 传递 &p 以对 main 函数中的变量 p 进行永久更改。
警告:
note: expected ‘char **’ but argument is of type ‘char (*)[10]’
代码:
#include<string.h>
#include<stdio.h>
void mystrcat(char **p, char *q)
{
while(**p != '\0')
{
*p++;
}
while(*q != '\0')
{
**p = *q;
(*p)++;
q++;
}
*p = '\0';
}
int main()
{
char p[10]="ravi";
char q[12]="ra";
mystrcat(&p, q);
printf("%s", p);
}
【问题讨论】:
-
试试
char *p="ravi"; -
@tstanisl 那将是 UB。
-
不,我不能改变 char p[10]="ravi";这不是我想要的,因为我希望我的程序在任何情况下都可以运行,即使给出的是 char 数组而不是指向 char 的指针
-
也许好的第一步是查看标准
strcat的接口。它在某处有char **吗?为什么你认为你需要一个? -
您是否也打算将它与动态分配的数组一起使用?这就是为什么第一个参数是
char**,以便能够修改该指针的原因吗?如果是这种情况,您还应该传递分配的大小,否则不需要传递指向指针的指针。
标签: c pointers c-strings strcat function-definition