#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;。
答案 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;