2016-12-05 14 views
-2

私はC言語には本当に新しいので、おそらく質問が簡単すぎるか関連性がありません。しかし、私はこの質問に答えることはできませんでした。フォルダ内の特定のファイルを見つけて編集してください

-90.txt、-89.txt、...、0.txt、1.txt、2.txt、...、90.txtという名前のファイルがあるフォルダがあります。

引数として数値(フォルダ名)を受け取り、そのファイルを開く関数が必要です。

function editFile(number){ 
    fp=fopen("/data/" + number + ".txt", "wr"); 

    ... 
    // do some other things 
} 
+2

Cでは、あなたがそのように文字列を構築することはできません。 'sprintf'を使ってファイル名をローカル変数に作成します。 –

+0

私は知りません。それは実際に私が必要とするものを示す擬似コードのようなものです。 – hasan

答えて

2

Cでは、文字列に数値を追加する柔軟性はありません。文字列に数値を追加する場合は、最初にitoa関数を使用して文字列に変換する必要があります。その機能に関するオンラインドキュメントを見つけることができます。ここ

とは、一般的な、あなたが文字列に数値を変換(タイプchar[]の新しいバッファに格納します)C

  • 最初の文字列に番号を追加する方法をアウトラインその後itoaまたはsprintf
  • を使用していますタイプchar[]の新しいバッファを作成します。完全なファイルパスを保持できるだけの十分なサイズを作成するようにしてください。
  • 次に、strcatを使用して2つの文字列を追加します。

上記のすべての処理の代わりに、sprintfを使用することもできます。

  • その後、連結の考えに文字列を持っていないfopen
+0

編集を提案していただきありがとうございます。私は答えを更新しました。 – crypton3535

1

Cに結果を渡すことができます。あなたはこのような関数を使用する必要がある文字列を連結したいのであれば:

function editFile(char* number) 
{ 
    char pathName[MAX_PATH]; 
    strcpy(pathName, "/data/"); 
    strcat(pathName, number); 
    strcat(pathName, ".txt"); 
    fp=fopen(pathName, "wr"); 

    ... 
    // do some other things 
} 

あなたはそれを短くするsprintfを利用することができます。ただし、バッファオーバーランのリスクがあるため、セキュリティチェックを追加する必要があります。ヒント:strcpy_s,strccat_s,sprintf_s。 (しかしこれはあなたの質問の答えを超えています)

1

Cでは、そうした方法で文字列を構築することはできません。ファイル名をローカル変数に作成するには、sprintfを使用します。

1

おそらく、整数、浮動小数点数、その他の文字列などを連結して文字列を「構築」できる高級言語に使用されています。これは、Cで

として機能しない@WeatherVaneがsprintf機能は仕事のための適切なツールである、指摘コメント:

char buffer[PATH_MAX]; // assuming POSIX 
sprintf(buffer, "/data/%d.txt", number); 
fp = fopen(buffer, "wr"); 
関連する問題