質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

1338閲覧

C++ のsprintfの使い方

yamatail

総合スコア77

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2022/02/01 05:34

引数に、ファイルパスOutFileNameと数numberを指定して、
その数の分ファイルを「ファイルパス_xxx」という名前で作るというプログラムを作りたいのですが、

sprintfでファイル名を作る際、
SaveFileName = sprintf("%s_0%2i", OutFileName, index)
のところで
intからchar*への無効な変換です
とエラーが出ます。

どこが悪いのでしょうか。
お詳しい方、アドバイスいただければ幸いです。

C++

1#include <stdio.h> 2#include <stdlib.h> 3 4int main(int argc, char** argv) 5{ 6 7 FILE *fp; 8 9 char *OutFileName; 10 char *SaveFileName; 11 int number; 12 int index = 0; 13 14 OutFileName = argv[1]; 15 printf("%s\n", OutFileName); 16 number = atoi(argv[2]); 17 18 19 for (index = 0; index < number; index++) 20 { 21 SaveFileName = sprintf("%s_0%2i", OutFileName, index); 22 fp = fopen(SaveFileName, "w"); 23 for (int i = 0; i < 5; i++) fprintf(fp, "%i\t%i\n", i, i+i); // write file 24  printf("\n"); 25   fclose(fp); 26 } 27 return 0; 28}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

int32_t

2022/02/01 05:48 編集

sprintf()のマニュアルを読んだり、「sprintf 使い方」「sprintf サンプルコード」などでウェブ検索してみましたか?
guest

回答2

0

ベストアンサー

c

1 char SaveFileName[FILENAME_MAX]; 2 snprintf(SaveFileName, FILENAME_MAX, "%s_0%2i", OutFileName, index);
  • ライブラリの使い方で問題が出たら、まずはマニュアルを読んだりサンプルコードを探して自分のコードとの違いを見つけましょう。
  • そもそも sprintf() はたいへん危なっかしい関数なので、snprintf() などを使いましょう。

投稿2022/02/01 06:37

編集2022/02/01 06:38
int32_t

総合スコア21929

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yamatail

2022/02/01 07:39

初歩的な問題に親切にアドバイス頂きありがとうございます。snprintf()すら知りませんでした。感謝いたします。
guest

0

[別解] C++っポい版:

C++

1#include <iostream> 2#include <iomanip> 3#include <sstream> 4#include <fstream> 5#include <string> 6 7int main(int argc, char** argv) { 8 9 const std::string OutFileName = argv[1]; 10 int number = std::stoi(argv[2]); 11 12 for ( int index = 0; index < number; ++index ) { 13 std::ostringstream stream; 14 stream << OutFileName << "_" << std::setfill('0') << std::setw(3) << index; 15 std::string SaveFileName = stream.str(); 16 17 std::ofstream file(SaveFileName); 18 for (int i = 0; i < 5; i++) { 19 file << i << '\t' << i+1 << std::endl; 20 } 21 } 22}

投稿2022/02/01 06:12

episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問