c - 使用argv的sprintf()行为

时间:2014-04-13 17:28:02

标签: c io printf

这是一个非常简单的问题和错误,我可以解释如何使用sprintf添加到argv值?

在命令行上,我有一个文件名称data.new.txt(但在我的场景中,我不知道文件的名称)如何写入一个名为data的新文件。 new.output.txt

我不想创建具有不同名称的新文件或更新新文件,因为这是程序将输出大约100多个文件,这是规范。

int main(int argc, char * argv[]){
    char buffer[100];
    sprintf(buffer, "%s.decoded", argv[1]);
    printf("%s\n", buffer);
}

干杯!

1 个答案:

答案 0 :(得分:0)

这是一个C99(它使用snprintf())程序。玩得开心!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *buildname(const char *old, const char *newpart) {
  char *dot;
  char *buf = NULL;

  dot = strrchr(old, '.');
  if (dot) {
    size_t len;
    len = snprintf(NULL, 0, "%.*s%s.%s",
                  (int)(dot - old) + 1, old, newpart, dot + 1);
    buf = malloc(len + 1);
    if (buf) {
      snprintf(buf, len + 1, "%.*s%s.%s",
              (int)(dot - old) + 1, old, newpart, dot + 1);
    }
  }
  return buf;
}

int main(void) {
  char *p, *q;

  q = "data.new.txt";
  p = buildname(q, "output");
  if (p) printf("%s ==> %s\n", q, p);
  else   printf("%s ==> (no dots)\n", q);
  free(p);

  q = "rrrrrrrrrrrr";
  p = buildname(q, "aaa");
  if (p) printf("%s ==> %s\n", q, p);
  else   printf("%s ==> (no dots)\n", q);
  free(p);

  q = "a.b.c.d.e.f.g.h.i.j.k.l";
  p = buildname(q, "Q.Q");
  if (p) printf("%s ==> %s\n", q, p);
  else   printf("%s ==> (no dots)\n", q);
  free(p);

  return 0;
}