【问题标题】:How do I set the number of characters output in a fprintf '%s' format using a variable?如何使用变量设置以 fprintf '%s' 格式输出的字符数?
【发布时间】:2009-09-23 23:54:12
【问题描述】:

我需要将可变数量的字符写入文件。例如,假设我想打印 3 个字符。 “TO”会将“TO”打印到文件中。 “LongString of Characters”会将“Lon”打印到文件中。

我该怎么做? (字符数在另一个变量中定义)。我知道这是可能的 fprintf(file,"%10s",string),但是 10 是预定义的

【问题讨论】:

    标签: c file printf


    【解决方案1】:

    这个对应你的例子:

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

    但您也提到了最大值,以限制数量:

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

    【讨论】:

      【解决方案2】:

      我相信您需要 "%*s" 并且您需要在字符串之前将长度作为整数传递。

      【讨论】:

      • 这将打印至少那么多字符,并且不会限制打印的字符数。
      【解决方案3】:

      作为替代方案,为什么不试试这个:

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

      暂时将字符串截断为您想要的长度,然后将其恢复。当然,这不是绝对必要的,但它确实有效,而且很容易理解。

      【讨论】:

      • 如果你这样做......确保string的长度至少是num-1,否则你将暂时覆盖一些随机的内存字节!
      • 这是真的。让它成为一个教训,永远不要相信你从互联网上匆匆/懒惰地编写的代码。
      【解决方案4】:

      作为替代方案,您可以从缓冲区创建“c_str”并准备字符串到 printf,就像我在此源中所做的那样:

      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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-12
        • 2012-04-10
        • 2021-01-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多