strcat函数如何使用

时间:2015-05-30 19:43:01

标签: c strcat

我是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 *类型的参数不兼容。同样,这可能很容易,但要尽可能澄清

3 个答案:

答案 0 :(得分:1)

在第二个例子中,

strcat(*s2,*s1);

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

strcat(s2,s1);

它仍然是错误的,因为s2指向一个字符串文字,无法修改。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您遇到困难的原因是因为您在s2前面使用s1*取消引用s2s1中的第一个字符}}。这就是原因。

虽然字符数组不是与指向一个或多个字符的指针完全相同的类型,但数组名称(以s1为例)被认为是指向数组中第一个字符的指针s'H'。使用名称s2指向s2中的第一个字符,即'w'。因此,如果在s2s1前面加上星号,则会分别读取每个数组中的第一个字符。

所以,正如在另一个答案中指出的那样,你试图连接两个8位字符,而不是将一个字符串连接到另一个字符串的末尾。