strcat函数如何使用

strcat function how to use

我是 C 语言的新手。我正在尝试使用 strcat,以下示例有效:

  char s1[20] = "Happy ";
  char s2[15] = "world";
  char s3[40] = "";
  strcat(s3,s1);

虽然,我想练习一下我之前看到的指针,所以:

char *s1 = "Happy";
char *s2 = "World";

strcat(*s2,*s1);

产生"char"类型的参数与“const char *”类型的参数不兼容。同样,这可能很简单,但要尽可能清楚

strcat(*s2, *s1);

尝试连接两个 8 位字符而不是两个字符串,这实际上是不可能的。 Strcat 需要两个指向字符串的指针。它所做的是找到第一个字符串的末尾,并开始逐个字符移动第二个字符串,因此结果是一个更长的字符串。

声明为

char * strcat (char * destination, const char * source);

因此

char s1[20] = "Hello ";
char s2[40] = "World!";
strcat(s2, s1);

是要走的路,因为 s2s1 都是指针。

但是,如果你真的想玩指针,你可以使用

char* strs[2];
strs[0] = "Hello ";
strs[1] = "World!";

char res[20];
strcat(res, *strs);
strcat(res, strs[1]);

在第二个例子中,

strcat(*s2,*s1);

存在类型不匹配问题,因为 *s2*s1 属于 char 类型。如果您使用:

strcat(s2,s1);

还是会出错,因为s2指向的是字符串字面量,不能修改

您遇到困难的原因是因为您通过在 s2* 前面使用 * 取消引用 s2s1 中的第一个字符=11=]。这就是为什么。

虽然字符数组不被视为与指向一个或多个字符的指针完全相同的类型,但数组名,让我们以s1为例,被视为指向第一个字符的指针数组 s,即 'H'。使用名称 s2 指向 s2 中的第一个字符,即 'w'。因此,如果在 s2s1 前放置一个星号,将分别读取每个数组中的第一个字符。

因此,正如另一个答案中所指出的,您正在尝试连接两个 8 位字符,而不是将一个字符串连接到另一个字符串的末尾。