如何在 C 中构建与 int 变量连接的字符串?
How do you build strings concatenated with int variables in C?
C 中的字符串操作不是我习惯的东西,来自高级语言。在这种情况下,我希望能够生成 fooN
形式的字符串,其中 N 是表示数字的变量。在 Java 中,它看起来像
for (int N = 0; N < 5; n++) {
System.out.println("foo"+N);
}
将输出
foo0
foo1
foo2
foo3
foo4
但是,我不知道在 C 中执行此操作的直接方法。我可能会在制作 char[] 的地方破解一些东西并弄清楚如何填充它,但我的想法并没有看起来很优雅。 C语言有没有简单的方法可以连接字符串和int变量?
谢谢
Is there a simple way that the C language allows concatenating strings and int variables?
是的,使用 s*printf()
。诀窍是内存管理。
使用固定大小的缓冲区。
// Coarse calculation of maximum memory needed to string-ify an int
#define INT_STRING_MAX (sizeof(int)*CHAR_BIT/3 + 3)
#define FOO_SZ (3 + INT_STRING_MAX)
char buf[FOO_SZ];
sprintf(buf, "foo%d", n);
println(buf);
分配内存。可以使用 snprintf(NULL, 0, ...
来计算内存需求。
int sz = snprintf(NULL, 0, "foo%d", n);
char *buf = malloc(sz + 1);
if (buf) {
sprintf(buf, "foo%d", n);
println(buf);
free(buf);
}
使用 snprintf()
估计和检查内存需求。
// Assume 64-bit or narrower int and so needs at most 21 bytes
#define FOO_SZ (3 + 21)
char buf[FOO_SZ];
int cnt = snprintf(buf, sizeof buf, "foo%d", n);
if (cnt >= 0 && (unsigned) cnt < sizeof buf) {
println(buf);
} else {
// wrong estimate
}
最佳选择取决于您想要的简单、高效和便携的程度。
C 中的字符串操作不是我习惯的东西,来自高级语言。在这种情况下,我希望能够生成 fooN
形式的字符串,其中 N 是表示数字的变量。在 Java 中,它看起来像
for (int N = 0; N < 5; n++) {
System.out.println("foo"+N);
}
将输出
foo0
foo1
foo2
foo3
foo4
但是,我不知道在 C 中执行此操作的直接方法。我可能会在制作 char[] 的地方破解一些东西并弄清楚如何填充它,但我的想法并没有看起来很优雅。 C语言有没有简单的方法可以连接字符串和int变量?
谢谢
Is there a simple way that the C language allows concatenating strings and int variables?
是的,使用 s*printf()
。诀窍是内存管理。
使用固定大小的缓冲区。
// Coarse calculation of maximum memory needed to string-ify an int #define INT_STRING_MAX (sizeof(int)*CHAR_BIT/3 + 3) #define FOO_SZ (3 + INT_STRING_MAX) char buf[FOO_SZ]; sprintf(buf, "foo%d", n); println(buf);
分配内存。可以使用
snprintf(NULL, 0, ...
来计算内存需求。int sz = snprintf(NULL, 0, "foo%d", n); char *buf = malloc(sz + 1); if (buf) { sprintf(buf, "foo%d", n); println(buf); free(buf); }
使用
snprintf()
估计和检查内存需求。// Assume 64-bit or narrower int and so needs at most 21 bytes #define FOO_SZ (3 + 21) char buf[FOO_SZ]; int cnt = snprintf(buf, sizeof buf, "foo%d", n); if (cnt >= 0 && (unsigned) cnt < sizeof buf) { println(buf); } else { // wrong estimate }
最佳选择取决于您想要的简单、高效和便携的程度。