我使用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'
感谢任何建议。
答案 0 :(得分: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
。
此外,你可能想要一个&lt; = here来实现这个目的:
for ((I = 1); (I <= number); (I++))
答案 1 :(得分:2)
根据rename()
man page,rename()
函数只有2个输入参数oldpath
和newpath
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);
答案 2 :(得分:2)
rename()
不是variadic function,这意味着您无法根据需要传递任意数量的变量。
如果您想使用rename(2)
或rename(3)
,则只需使用2个字符串。因此,如果要使用变量名称,请将字符串组合在一起,然后将2个变量传递给函数。
答案 3 :(得分:1)
http://www.cplusplus.com/reference/cstdio/rename/
他是参考。你确实有太多的论点。它只需要两个char数组。
答案 4 :(得分:1)
我认为这里的问题不在您的代码中。你正在读哪本书?
this manual说rename
接受了多少个参数?那里有什么表明rename
使用printf-like format strings的内容吗?否?
当你假设你可以通过反复试验学习而不阅读任何手册时,这就是问题所在。这样学习C很危险。如果您的程序最终使用未定义的行为,他们可能在您的机器上有时,并且由于神秘的原因以神秘的方式失败,无法完全在其他机器上工作等帮自己一个忙,放弃猜测;拿一本书,如果还没有,请阅读!你最终会学习编写可移植代码,而不是猜测/试错。
答案 5 :(得分:1)
尝试学习如何使用在K&amp; R .... printf函数实现中给出的省略号运算符 。