【发布时间】:2012-02-04 20:05:28
【问题描述】:
如何在 C 中将一个字符串“包含”到另一个字符串中?
这是一个例子:
string1 = "www.google";
string2 = "http://"+string1+".com";
我在使用 strcat() 时遇到了困难。
谢谢
【问题讨论】:
-
sprintf可能会成功。
标签: c string concatenation strcat
如何在 C 中将一个字符串“包含”到另一个字符串中?
这是一个例子:
string1 = "www.google";
string2 = "http://"+string1+".com";
我在使用 strcat() 时遇到了困难。
谢谢
【问题讨论】:
sprintf 可能会成功。
标签: c string concatenation strcat
如果有可用空间,您可以使用snprintf 及其功能返回所需的大小:
const char *string1 = "www.google";
char *string2;
size_t length;
length = snprintf(NULL, 0, "http://%s.com", string1);
if (length < 0) {
// Handle error.
} else {
string2 = malloc(length + 1);
snprintf(string2, length + 1, "http://%s.com", string1);
}
稍微不同的变体,避免使用格式字符串两次:
const char *string1 = "www.google";
const char *format = "http://%s.com";
char *string2;
size_t length;
length = snprintf(NULL, 0, format, string1);
if (length < 0) {
// Handle error.
} else {
string2 = malloc(length + 1);
snprintf(string2, length + 1, format, string1);
}
【讨论】:
我在使用 strcat() 时遇到了困难
那就试试 sprintf:
char str[] = "www.google";
char dest[100];
snprintf(dest, sizeof(dest), "http://%s.com", str);
7.19.6.5-3
snprintf函数返回字符数 已经写了 n 足够大,不算 终止空字符。
【讨论】:
str 的长度,这会导致潜在的缓冲区溢出!
snprintf 可以告诉您它需要多少空间,这样可以轻松准确地分配所需的内存量,而不是使用静态缓冲区。