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

C 如何设置fprintf';%中输出的字符数s';使用变量格式化?,c,file,printf,C,File,Printf,我需要向文件中写入可变数量的字符。例如,假设我要打印3个字符。“TO”将“TO”打印到文件中。“LongString字符”会将“Lon”打印到文件中 我该怎么做?(字符数在另一个变量中定义)。我知道这可能是fprintf(文件“%10s”,字符串),但10是预定义的这一个对应于您的示例: fprintf(file, "%*s", 10, string); 但您也提到了一个最大值,以限制数量: fprintf(file, "%*.*s", 10, 10, string); 我相信您需要“%*s

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


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

这一个对应于您的示例:

fprintf(file, "%*s", 10, string);
但您也提到了一个最大值,以限制数量:

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

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

作为替代方法,为什么不尝试以下方法:

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

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

作为替代方案,您可以从缓冲区创建“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);
}
void打印(字符*值,大小){
char*p=(char*)malloc(大小+1);//+1到零char
炭流;
对于(int i=0;i

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

这将至少打印这么多字符,并且不会限制打印的字符数。如果您这样做。。。请确保
字符串
的长度至少为
num-1
,否则将临时覆盖内存中的一些随机字节!!这是真的。让它成为一个教训,永远不要相信你从互联网上获得的匆忙/懒散编写的代码。