2013-03-26 78 views
-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' 

感谢您的任何建议。

+0

我想你正在寻找['sprintf'](http://en.cppreference。com/w/c/io/fprintf)函数。 – 2013-03-26 14:00:53

回答

2

,该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); 
+0

谢谢,这是一个简单的方法。 – 2013-03-26 14:13:17

3

rename只需要两个参数和你传递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++)) 
1

我想这里的问题不在你的代码中。你在读哪本书?

this manualrename接受多少个参数?那里有什么表明rename使用printf-like format strings?没有?

这是问题,当你认为你可以通过试验和错误学习,而无需阅读任何手册。 C这样学习是危险的。如果你的程序最终使用未定义的行为,他们可能在你的机器上工作有时,并因神秘的原因和神秘的方式失败,不能完全在其他机器上工作等。帮你一个忙,并退出猜测;拿一本书,如果你还没有一本,并阅读它!你最终会学习编写便携式代码,比猜测/试验和错误要快得多。

2

rename()不是variadic function,这意味着你不能将它传递给你想要的变量。

如果要使用rename(2)rename(3),则只需使用2个字符串。所以如果你想使用变量名,把这些字符串结合在一起,然后把2个变量传递给函数。

1

尝试学习如何使用K & R中给出的省略号运算符....实现printf函数 。