-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つの入力引数しかありません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 に答える
2

rename()可変個引数関数ではありません。つまり、必要な数の変数を渡すことはできません。

使用する場合rename(2)、またはrename(3)2つの文字列のみを使用する必要がある場合。したがって、変数名を使用する場合は、文字列を組み合わせてから、2つの変数を関数に渡します。

于 2013-03-26T14:06:54.013 に答える
1

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

彼はリファレンスです。引数が多すぎます。2つのchar配列のみが必要です。

于 2013-03-26T14:01:49.930 に答える
1

ここでの問題はあなたのコードにはないと思います。あなたはどの本を読んでいますか?

このマニュアルはいくつの議論renameを受け入れると言っていますか?printfのようなフォーマット文字列renameを使用していることを示すものはありますか?いいえ?

マニュアルを読まずに試行錯誤しながら学べると思ったら、それが問題です。Cはそのように学ぶのは危険です。プログラムが未定義の動作を使用することになった場合、それらは時々あなたのマシンで動作し、不思議な理由で不思議な方法で失敗したり、他のマシンで完全に動作しなかったりするかもしれません。まだ持っていない場合は、本を入手して読んでください。推測/試行錯誤よりもはるかに速くポータブルコードを書くことを学ぶことになります。

于 2013-03-26T14:06:13.790 に答える
1

K&R....printf関数の実装で与えられている省略記号演算子の使用方法を学習してみてください。

于 2013-03-26T14:30:05.827 に答える