如何在 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()。诀窍是内存管理。

  1. 使用固定大小的缓冲区。

    // 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);
    
  2. 分配内存。可以使用 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);
    }
    
  3. 使用 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
    }
    

最佳选择取决于您想要的简单、高效和便携的程度。