在C语言中连接字符串

在C语言中连接字符串,c,string,concatenation,C,String,Concatenation,我正在尝试用java来表示类似的东西 str=“stuff”+str 我尝试使用sprintf(str,“stuff%s”,str);str=strcat(“填充物”,str); 所有这些都不起作用。。。我是否必须使用第二个字符串来保存结果 类似于sprintf(str2,“stuff%s”,str)或str2=strcat(“stuff”,str) 阅读文档。strcat的正确格式是 strcat(char* destination, const char* source); 将源附加到目标

我正在尝试用java来表示类似的东西 str=“stuff”+str

我尝试使用sprintf(str,“stuff%s”,str);str=strcat(“填充物”,str); 所有这些都不起作用。。。我是否必须使用第二个字符串来保存结果


类似于sprintf(str2,“stuff%s”,str)或str2=strcat(“stuff”,str)

阅读文档。
strcat的正确格式是

strcat(char* destination, const char* source);
附加到
目标
。您的方法是向后的-而且由于
“Stuff”
常量字符*
,它将失败

strcat(str, "Stuff");
应该可以工作,结果是
str
包含原始字符串,后跟
Stuff

例如:

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

int main(void) {
  char string[256];
  char s2[256];
  strcpy(string, "hello ");
  strcat(string, "world");
  printf("The concatenated string is '%s'\n", string);
  sprintf(string, "I say %s", string);
  printf("The new string is '%s\n'", string);
  strcpy(string, "hello world");
  sprintf(s2, "I say %s", string);
  printf("And now it is '%s'\n", s2);
}
如您所见,您需要将
sprintf
的结果放在另一个字符串中,否则将被覆盖(当编译器开始将
string
读入格式字符串时,它已被覆盖…)


我认为没有办法创建字符串的副本来完成您要做的事情——预先设置字符串常量。有些语言会把你给宠坏了…

实际上最好使用第二个字符串

但是,如果您确实不想这样做,并且您确信在变量中分配了足够的空间。然后您可以执行以下操作

strncpy(memmove(str+6,str,strlen(str)+1)-6,“stuff”,6);//+1复制空字符

即使这个解决方案有效,我也不建议您使用它。它的可读性较差,而且——我认为——速度较慢

如果您正在使用malloc并且需要realloc。你没有问题,因为重新分配更大的内存块会产生一个新的未确定的值。

但是如果我使用strcat(str,“stuff”);我会得到相反的结果,(str=str+“stuff”)对吗?我怎么才能得到str=“stuff”+str;?我想如果不将stuff传递给字符串,我就不能使用strcat
The concatenated string is 'hello world'
The new string is 'I say I say world
'And now it is 'I say hello world'
memmove(str + 6, str, strlen(str) + 1);
strncpy(str, "stuff ", 6);