在C语言中连接字符串
我正在尝试用java来表示类似的东西 str=“stuff”+str 我尝试使用sprintf(str,“stuff%s”,str);str=strcat(“填充物”,str); 所有这些都不起作用。。。我是否必须使用第二个字符串来保存结果在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); 将源附加到目标
类似于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);