如何将我的数组与strcat连接起来

时间:2014-09-01 13:07:09

标签: c

#include <stdio.h>
#include <string.h>

int main ()
{
   char str[800];

   char insert[7] = "insert ";
   char* ip = &insert;


   strcpy (str,"these ");
   strcat (str,"strings ");
   strcat (str,"are ");

   strcat (str, ip);
   // or? strcat (str, insert);

   strcat (str,"concatenated.");

   printf("%s\n", str);

}

因此我无法添加阵列&#39;插入&#39;到阵列&#39;。我不确定是否必须使用指针插入或不插入。我尝试了几种不同的方法,但似乎无法将其打印出来#34;这些字符串是插入连接的&#34;。

6 个答案:

答案 0 :(得分:1)

尝试此初始化

char insert[] = "insert ";
char *ip = insert;

这样可以确保相应的字符串以空值终止,并且您没有不兼容的指针类型问题。

注意:Ani已经明确指出初始化char insert[7] = "insert ";不可移植(这是合乎逻辑的,因为当包含null char时,大小应为8)。显然它会导致某些编译器发生段错误。

答案 1 :(得分:0)

当你使用strcpy时,根据手册页,它将从你在第一个参数中提供的地址开始复制str。

所以不要做

strcpy(str, "strings");

尝试给他一个字符串完成的地址

strcpy(str + strlen(str), "strings ");

等等

答案 2 :(得分:0)

当你这样做时 -

char insert[7] = "insert ";
char* ip = &insert;

在这里,您要分配char数组的地址。不是Char数组的地址。 因此,如果您编译程序,您将收到警告 -

edit.c: In function ‘main’:
edit.c:9:15: warning: initialization from incompatible pointer type [enabled by default]

所以试试这个改变 -

char insert[7] = "insert ";
char *ip = insert; 

仅分配char数组的地址。不是char数组地址的地址

char *ip = "insert ";

这也适合你!

<强>否则 正如你所提到的,你也可以按照这种方式 -

int main ()
{
   char str[800];

   char insert[7] = "insert ";


   strcpy (str,"these ");
   strcat (str,"strings ");
   strcat (str,"are ");

   strcat (str, insert);

   strcat (str,"concatenated.");

   printf("%s\n", str);

}

答案 3 :(得分:0)

删除char insert[7] = "insert ";不需要。

char *ip = &insert;更改为char *ip = "insert "

答案 4 :(得分:0)

基本上存在一个使代码无效的问题。

问题是,在您的代码中,您可以使用以下方式分配:

char* ip = &insert;

真的应该是:

char* ip = insert;

变量insert不是数组。它是指向为程序分配的点的指针。基本上 - 它只是指向数组中第一个元素的指针。

意思是:

insert[0] = 'a';

与:

相同
*insert = 'a';

因此insert的地址是指向数组的指针指针。

您可以将*运算符TWICE(** - 类似于...... [某些变量通常是指针的内容]的内容... ip使用strcat或者您可以输入strcat(str, insert);,因为在此程序中根本不需要变量ip

另一个错误是没有为宣告字符串结尾的NULL终止符\0节省空间。

所以要么输入char insert[] = "insert ";根据直接赋值确定数组的大小,要么你可以做char insert[8] = "insert ";,这基本上就是那个字符串的大小(它需要一个NULL终止符,所以它&# 39; s&#39;&#39;&#39; n&#39;&#39;&#39;&#39; e&#39;&#39; r&#39;,&# 39; t&#39;,&#39;&#39;和&#39; \ 0&#39;)。

答案 5 :(得分:0)

$man strcat

char *strcat(char *dest, const char *src);

你可以:

strcat (str, ip);

或者

strcat(str, insert);

如果您正确初始化了字符串:

   char insert[] = "insert ";
   char * ip = insert;