数组循环不起作用

时间:2011-03-20 21:09:57

标签: c arrays loops

我试过这个:

if (argc > 2) {
  int i;
  for(i = 0; i < argc; i++) {
    if(i != 0) {
      rename_file(argv[i]);
    }
  }
}

如果我传入两个文件名,只重命名第一个,这个循环怎么回事?

编辑:继承了rename_file函数(我觉得应该可行)

void rename_file(char const *filename) {
  struct tm *clock;
  struct stat attrib;
  const char *dot = strrchr(filename, '.');
  const char *ext = NULL;
  if (dot && *dot) {
      ext = dot + 1;
  }

  stat(filename, &attrib);

  clock = gmtime(&(attrib.st_mtime));

  char newname[250];
  if (!ext) {
    printf("ERROR: No File Extenstion");
  } else {
    sprintf(newname, "%02d_%02d_%02d.%s", clock->tm_mday, clock->tm_mon, clock->tm_year + 1900, ext);
  }

  rename(filename, newname);
}

5 个答案:

答案 0 :(得分:1)

试试这个:

if (argc > 2) {
  for(int i = 1; i < argc; i++) {
      rename_file(argv[i]);
  }
}

答案 1 :(得分:0)

如果您的命令行如下所示:

./renamestuff stuff.txt stuff.php

然后你可能想要这个:

for(int i = 1; i < argc; i++) {
    rename_file(argv[i]);
}

答案 2 :(得分:0)

我没有看到这样的错误,但我确实在代码中看到了很多冗余。你可以这样做:

for (i = 1; i < argc; i++)
{
    rename_file(argv[i]);
}

如果您没有调试器,那么您可以暂时添加一些调试printf

printf("argc = %d\n", argc);
for (i = 1; i < argc; i++)
{
    printf("i = %d, argv[i] = %s\n", i, argv[i]);
    rename_file(argv[i]);
}

这可以让您在每次调用rename_file之前看到循环中发生了什么。

答案 3 :(得分:0)

您没有检查rename的返回值。如果您传递在同一日期创建的两个文件的名称(并使用相同的扩展名),则第二个文件可能会失败(这取决于您的c lib)。而且,像其他人指出的那样修复你的循环。

答案 4 :(得分:-1)

第一个元素argv[0]包含可执行文件本身的名称。因此,你的循环应该从第一个元素开始。