C char* + char* 连接
C char* + char* concatenation
我有 char* str1
和 char* str2
我想这样连接res = str1 + str2
strcat(str1, str2)
改变str1的值,这不是我需要的
如何得到这个结果?
您必须先复制第一个字符串,然后将第二个字符串连接到该字符串:
strcpy(res, str1);
strcat(res, str2);
...确保 res
有足够的 space 分配给结果,包括空终止符。
或者作为 one-liner,如果您愿意(谢谢,Eugene Sh.):
strcat(strcpy(res,str1), str2)
另一个(也是更安全的)选项是使用 snprintf()
,它确保您不会溢出目标缓冲区:
int count = snprintf(res, sizeof res, "%s%s", str1, str2);
如果 count
小于 res
的大小减一,结果将被截断以适合。请注意,res
必须是一个数组(不会衰减为指针),sizeof res
才能工作。如果您有缓冲区长度的其他来源,则可以改用它。
(snprintf 信息改编自 user3386109 的评论 -- 谢谢!)
我有 char* str1
和 char* str2
我想这样连接res = str1 + str2
strcat(str1, str2)
改变str1的值,这不是我需要的
如何得到这个结果?
您必须先复制第一个字符串,然后将第二个字符串连接到该字符串:
strcpy(res, str1);
strcat(res, str2);
...确保 res
有足够的 space 分配给结果,包括空终止符。
或者作为 one-liner,如果您愿意(谢谢,Eugene Sh.):
strcat(strcpy(res,str1), str2)
另一个(也是更安全的)选项是使用 snprintf()
,它确保您不会溢出目标缓冲区:
int count = snprintf(res, sizeof res, "%s%s", str1, str2);
如果 count
小于 res
的大小减一,结果将被截断以适合。请注意,res
必须是一个数组(不会衰减为指针),sizeof res
才能工作。如果您有缓冲区长度的其他来源,则可以改用它。
(snprintf 信息改编自 user3386109 的评论 -- 谢谢!)