代码之家  ›  专栏  ›  技术社区  ›  Señor Reginold Francis

如何使用变量设置fprintf“%s”格式中输出的字符数?

  •  4
  • Señor Reginold Francis  · 技术社区  · 16 年前

    我需要在一个文件中写入可变数量的字符。例如,假设我要打印3个字符。”“将打印”到“文件”。“longstring”将把“lon”打印到一个文件中。

    我该怎么做?(字符数在另一个变量中定义)。我知道这是可能的fprintf(文件,“%10s”,字符串),但10是预先定义的

    4 回复  |  直到 11 年前
        1
  •  19
  •   DigitalRoss    16 年前

    这个对应于您的示例:

    fprintf(file, "%*s", 10, string);
    

    但你也提到了一个最大值,也限制了这个数字:

    fprintf(file, "%*.*s", 10, 10, string);
    
        2
  •  1
  •   Stephen Nutt    16 年前

    我相信您需要“%*s”,并且您需要将长度作为字符串前面的整数传递。

        3
  •  1
  •   Chris Lutz    16 年前

    作为一种选择,为什么不试试这个呢:

    void print_limit(char *string, size_t num)
    {
      char c = string[num];
      string[num] = 0;
      fputs(string, file);
      string[num] = c;
    }
    

    将字符串临时截断到所需的长度,然后将其还原。当然,这不是严格必要的,但它是有效的,而且很容易理解。

        4
  •  0
  •   Vitold S.    11 年前

    作为一种替代方法,您可以从缓冲区创建“c_str”,并像在这个源代码中那样准备打印字符串:

    void print(char *val, size_t size) {
        char *p = (char *)malloc(size+1); // +1 to zero char
        char current;
        for (int i=0; i < size; ++i) {
            current = val[i];
            if (current != '\0') {
               p[i] = current; 
            } else {
               p[i] = '.'; // keep in mind that \0 was replace by dot
            }
            p[i+1] = '\0';
        }
        printf("%s", p);
        free(p);
    }
    

    但它解决了错误的方式。您应该使用格式为“%*s”的fprintf。