我是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 *类型的参数不兼容。同样,这可能很容易,但要尽可能澄清
答案 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);
是要走的路,因为s2
和s1
都是指针。
但是,如果您真的想玩指针,可以使用
char* strs[2];
strs[0] = "Hello ";
strs[1] = "World!";
char res[20];
strcat(res, *strs);
strcat(res, strs[1]);
答案 2 :(得分:0)
您遇到困难的原因是因为您在s2
前面使用s1
和*
取消引用s2
和s1
中的第一个字符}}。这就是原因。
虽然字符数组不是与指向一个或多个字符的指针完全相同的类型,但数组名称(以s1
为例)被认为是指向数组中第一个字符的指针s
,'H'
。使用名称s2
指向s2中的第一个字符,即'w'
。因此,如果在s2
或s1
前面加上星号,则会分别读取每个数组中的第一个字符。
所以,正如在另一个答案中指出的那样,你试图连接两个8位字符,而不是将一个字符串连接到另一个字符串的末尾。