-2

我使用 Code::Blocks 并且我想创建一个供个人使用的程序,但是我有一个问题,这是代码:

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

int main()
{
    int number;
    char name[100];
    char extension[100];
    int I;

    printf("Filename: ");
    scanf("%s", name);
    system("CLS");
    printf("File number: ");
    scanf("%d", &number);
    system("CLS");
    printf("Extension: ");
    scanf("%s", extension);
    system("CLS");
    for ((I = 1); (I = number); (I++))
    {
        rename(("&s-%d%s"), ("%s-%d.tmp1"), name, number, extension); //ERROR HERE
    }
    return 0;
}

当我编译时,我得到一个错误:

error: too many arguments to function 'rename'

感谢您的任何建议。

4

6 回答 6

3

rename只需要 2 个参数,而你传递了 4 个。

NAME
     rename -- change the name of a file

SYNOPSIS
     #include <stdio.h>

     int
     rename(const char *old, const char *new);

您可能希望根据您的代码sprintf()在调用之前使用。rename

此外,您可能希望在此处使用 <= 以使其按预期工作:

for ((I = 1); (I <= number); (I++))
于 2013-03-26T14:01:42.327 回答
2

rename()不是可变参数函数,这意味着您不能传递任意数量的变量。

如果你想使用rename(2)或者rename(3)你只需​​要使用 2 个字符串。因此,如果您想使用变量名,请将字符串组合在一起,然后将 2 个变量传递给函数。

于 2013-03-26T14:06:54.013 回答
2

根据rename() 手册页,该rename()函数只有 2 个输入参数oldpathnewpath

int rename(const char *oldpath, const char *newpath);

因此,您可以rename()在代码中调用函数之前添加它

char oldpath[200], newpath[200];
sprintf(oldpath, "%s-%d%s", name, number, extension);
sprintf(newpath, "%s-%d.tmp1", name, number);

rename(oldpath, newpath);
于 2013-03-26T14:02:42.673 回答
1

尝试学习如何使用 K&R ....implementation of printf function 中给出的省略号运算符。

于 2013-03-26T14:30:05.827 回答
1

我认为这里的问题不在您的代码中。你在看哪本书?

本手册rename接受多少参数?是否有任何东西表明rename使用类似 printf 的格式字符串?不?

当您假设您可以通过反复试验学习而无需阅读任何手册时,这就是问题所在。像这样学习 C 是危险的。如果您的程序最终使用未定义的行为,它们有时可能会在您的机器上运行,并且由于神秘的原因和以神秘的方式失败,无法完全在其他机器上运行,等等。帮自己一个忙,别再猜测了;买一本书,如果你还没有,读一读吧!您最终将学习编写可移植代码,这比猜测/试错要快得多。

于 2013-03-26T14:06:13.790 回答
1

http://www.cplusplus.com/reference/cstdio/rename/

他是参考。你的论点太多了。它只需要两个 char 数组。

于 2013-03-26T14:01:49.930 回答