user-0 提问: C语言中有使用两个字符串的连接字符串，而不改变原字符串的吗？

回复:
user: user-1
content: 引用 19 楼 zhao4zhong1 的回复:[quote=引用 18 楼 lin5161678 的回复:] [quote=引用 17 楼 zhao4zhong1 的回复:] [quote=引用 16 楼 Turntogo 的回复:] 不用缓冲区，还不要改变两个源字符串，这是不可能的。 5楼难道不是一个反例吗？[/quote]输出缓冲也是缓冲 [/quote] 但这个输出缓冲不是专为这两个字符串设置的，你写任何输出都要用到这个输出缓冲。 所以说这绝对是一个反例。[/quote] 不要只针对我这句话，你要看楼主的要求，楼主的要求是连接起来还要使用它（难道所谓的使用仅仅是显示出来吗），你这样有法使用吗？其实楼主自己在括号里提到的不想使用的方法是一个非常可行的方法。希望楼主不要怕麻烦。

user: user-2
content: 你的需求不可实现

user: user-3
content: 引用 16 楼 Turntogo 的回复:不用缓冲区，还不要改变两个源字符串，这是不可能的。 5楼难道不是一个反例吗？

user: user-1
content: 不用缓冲区，还不要改变两个源字符串，这是不可能的。

user: user-3
content: 引用 18 楼 lin5161678 的回复:[quote=引用 17 楼 zhao4zhong1 的回复:] [quote=引用 16 楼 Turntogo 的回复:] 不用缓冲区，还不要改变两个源字符串，这是不可能的。 5楼难道不是一个反例吗？[/quote]输出缓冲也是缓冲 [/quote] 但这个输出缓冲不是专为这两个字符串设置的，你写任何输出都要用到这个输出缓冲。 所以说这绝对是一个反例。

user: user-4
content: 引用 17 楼 zhao4zhong1 的回复:[quote=引用 16 楼 Turntogo 的回复:] 不用缓冲区，还不要改变两个源字符串，这是不可能的。 5楼难道不是一个反例吗？[/quote]输出缓冲也是缓冲

user: user-5
content: sprintf(buff, "%s%s", str1, str2); 然后buff收尾加个0

user: user-3
content: 引用 5 楼 zhao4zhong1 的回复:printf("%s%s\n",str1,str2);//这个绝对不需要申请新的内存！ 相由心生……

user: user-6
content: 引用 4 楼 zhangxiangDavaid 的回复:[quote=引用 3 楼 mbctb 的回复:] [quote=引用 1 楼 zhangxiangDavaid 的回复:] 仅供参考  int main() { 	char *s1 = "abc"; 	char *s2 = "1234"; 	int n = strlen(s1) + strlen(s2) + 1; 	char *s = malloc(sizeof(char)*n); 	strcpy(s, s1); 	strcpy(s + strlen(s1), s2); 	free(s); 	return 0; }  这个不是我需要的，这个是申请一个新内存，然后把两个字符分别复制过去。  我需要的是简洁的方式。用到两个字符串的合字符串，而不改变它们本身。[/quote]  开什么玩笑，你想合并s1、s2，却又不想s1或s2，这难道不需要申请新的内存吗？否则合并后的字符串放哪儿呢？ [/quote] +10086.

user: user-3
content: printf("%s%s\n",str1,str2);//这个绝对不需要申请新的内存！

user: user-4
content: 引用 14 楼 Minikinfish 的回复:[quote=引用 13 楼 lin5161678 的回复:] [quote=引用 1 楼 zhangxiangDavaid 的回复:] 仅供参考  int main() { 	char *s1 = "abc"; 	char *s2 = "1234"; 	int n = strlen(s1) + strlen(s2) + 1; 	char *s = malloc(sizeof(char)*n); 	strcpy(s, s1); 	strcpy(s + strlen(s1), s2); 	free(s); 	return 0; } strcat被你吃了[/quote]  strcpy(s + strlen(s1), s2);，，，，这个需要strcat吗？[/quote]strcat(s, s2) 专门用来实现 strcpy(s + strlen(s1), s2)  你说需不需要?

user: user-7
content: 引用 13 楼 lin5161678 的回复:[quote=引用 1 楼 zhangxiangDavaid 的回复:] 仅供参考  int main() { 	char *s1 = "abc"; 	char *s2 = "1234"; 	int n = strlen(s1) + strlen(s2) + 1; 	char *s = malloc(sizeof(char)*n); 	strcpy(s, s1); 	strcpy(s + strlen(s1), s2); 	free(s); 	return 0; } strcat被你吃了[/quote]  strcpy(s + strlen(s1), s2);，，，，这个需要strcat吗？

user: user-4
content: 引用 1 楼 zhangxiangDavaid 的回复:仅供参考  int main() { 	char *s1 = "abc"; 	char *s2 = "1234"; 	int n = strlen(s1) + strlen(s2) + 1; 	char *s = malloc(sizeof(char)*n); 	strcpy(s, s1); 	strcpy(s + strlen(s1), s2); 	free(s); 	return 0; } strcat被你吃了

user: user-0
content: 既然没有就算了，只能用上面那位网友的方法。

user: user-0
content: 引用 4 楼 zhangxiangDavaid 的回复:[quote=引用 3 楼 mbctb 的回复:] [quote=引用 1 楼 zhangxiangDavaid 的回复:] 仅供参考  int main() { 	char *s1 = "abc"; 	char *s2 = "1234"; 	int n = strlen(s1) + strlen(s2) + 1; 	char *s = malloc(sizeof(char)*n); 	strcpy(s, s1); 	strcpy(s + strlen(s1), s2); 	free(s); 	return 0; }  这个不是我需要的，这个是申请一个新内存，然后把两个字符分别复制过去。  我需要的是简洁的方式。用到两个字符串的合字符串，而不改变它们本身。[/quote]  开什么玩笑，你想合并s1、s2，却又不想s1或s2，这难道不需要申请新的内存吗？否则合并后的字符串放哪儿呢？ [/quote] 我就是想问：有什么函数，能自己创建缓冲区，再把两个字符串起来，把地址返回给调用者。

user: user-5
content: 引用 9 楼 Minikinfish 的回复:[quote=引用 8 楼 my_live_123 的回复:] sprintf(buff, "%s%s", str1, str2); 然后buff收尾加个0  这个有必要加0吗？[/quote]  A terminating null character is automatically appended after the content.  记不住了，谢谢提醒

user: user-7
content: 引用 8 楼 my_live_123 的回复:sprintf(buff, "%s%s", str1, str2); 然后buff收尾加个0  这个有必要加0吗？

user: user-8
content: 引用 3 楼 mbctb 的回复:[quote=引用 1 楼 zhangxiangDavaid 的回复:] 仅供参考  int main() { 	char *s1 = "abc"; 	char *s2 = "1234"; 	int n = strlen(s1) + strlen(s2) + 1; 	char *s = malloc(sizeof(char)*n); 	strcpy(s, s1); 	strcpy(s + strlen(s1), s2); 	free(s); 	return 0; }  这个不是我需要的，这个是申请一个新内存，然后把两个字符分别复制过去。  我需要的是简洁的方式。用到两个字符串的合字符串，而不改变它们本身。[/quote]  开什么玩笑，你想合并s1、s2，却又不想s1或s2，这难道不需要申请新的内存吗？否则合并后的字符串放哪儿呢？

user: user-0
content: 引用 1 楼 zhangxiangDavaid 的回复:仅供参考  int main() { 	char *s1 = "abc"; 	char *s2 = "1234"; 	int n = strlen(s1) + strlen(s2) + 1; 	char *s = malloc(sizeof(char)*n); 	strcpy(s, s1); 	strcpy(s + strlen(s1), s2); 	free(s); 	return 0; }  这个不是我需要的，这个是申请一个新内存，然后把两个字符分别复制过去。  我需要的是简洁的方式。用到两个字符串的合字符串，而不改变它们本身。

user: user-9
content: 你连起来的字符串肯定需要地址存放 新建str缓存 strcat(strcpy(str,str1),str2);