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

时间:2009-09-23 23:54:12

标签: c file printf

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

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

4 个答案:

答案 0 :(得分:19)

这个对应于你的例子:

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

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

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

答案 1 :(得分:1)

我相信你需要“%* s”,你需要在字符串之前将长度作为整数传递。

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

作为替代方案,您可以创建" 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);
}

但它解决方法错误。你应该使用格式&#34;%* s&#34;。

来使用fprintf