関数に 2 個の引数を指定できませんとは?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
HIRO31

関数に 2 個の引数を指定できませんとは?

#1

投稿記事 by HIRO31 » 10年前

以下のプログラミングを入力すると、.cpp(37): error C2660: 'fopen_s' : 関数に 2 個の引数を指定できません。
と出ます。何がいけないのでしょうか?

#include <stdio.h>
#include <process.h>



#define X_SIZE 200 // 処理できる最大画像
#define Y_SIZE 160

#define LX_SIZE 400 // 処理できる最大画像
#define LY_SIZE 320

#define HIGH 255 // 画像の最大強度値
#define LOW 0 // 画像の最小強度値
#define LEVEL 256 // 画像の強度レベル値

// BMPファイルのフォーマットに従って用意した変数
typedef unsigned short WORD;
typedef unsigned long DWORD;


unsigned char image_in[Y_SIZE][X_SIZE][3]; // 入力カラー画像配列
unsigned char image_out[LY_SIZE][LX_SIZE][3]; //出力カラー画像配列



//********************************************
// 24Bit RAW ファイル読み込み *
//********************************************
void readRAW(
char *filename, // RAW画像ファイル名
unsigned char image[Y_SIZE][X_SIZE][3] // 24ビットRGB画像配列
)
{
FILE *fp;

// ファイルオープン
if ((fp = fopen_s(filename, "rb")) == NULL) {
printf("readRAW: Open error!\n");
exit(1);
}
printf("input file : %s\n", filename);

fread(image, 1, X_SIZE*Y_SIZE * 3, fp);
fclose(fp);
}


//******************************************************
// 24ビット-ビットマップデータをRAWファイルに出力 *
//******************************************************
void writeRAW(
char *filename,
unsigned char image[LY_SIZE][LX_SIZE][3])
{
FILE *fp;

// ファイルオープン
if ((fp = fopen(filename, "wb")) == NULL) {
printf("writeRAW: Open error!\n");
exit(1);
}
printf("output file : %s\n", filename);

fwrite(image, 1, LX_SIZE*LY_SIZE * 3, fp);
fclose(fp);

}


//**********************************************
// RGBカラー画像を二倍拡大         *
//**********************************************
void Image_2bai(
unsigned char image_in[Y_SIZE][X_SIZE][3],
unsigned char image_out[LY_SIZE][LX_SIZE][3])
{
int y, x, z;

for (y = 0; y<Y_SIZE; y++)
for (x = 0; x< X_SIZE; x++)
for (z = 0; z<3; z++){
image_out[2 * y][2 * x][z] = image_in[y][x][z];
image_out[2 * y][2 * x + 1][z] = image_in[y][x][z];
image_out[2 * y + 1][2 * x][z] = image_in[y][x][z];
image_out[2 * y + 1][2 * x + 1][z] = image_in[y][x][z];
}
for (y = 0; y<Y_SIZE / 2; y++)
for (x = 0; x< X_SIZE / 2; x++)
for (z = 0; z<3; z++){
image_out[y][x][z] = image_in[2 * y][2 * x][z];
}
}



void main(void)
{
char input_name[100], output_name[100];

printf("入力画像ファイル名(*.raw):"); scanf("%s", input_name);

readRAW(input_name, image_in); // 画像の入力,RGB24ビットカラーBMP画像を配列に格納


//画像処理:左右反転
Image_2bai(image_in, image_out); // RGBカラー画像を白黒画像に変換
printf("左右反転画像ファイル名(output_name.raw):"); scanf("%s", output_name);
writeRAW(output_name, image_out); // 画像出力

}

アバター
axis
記事: 10
登録日時: 10年前
住所: 山梨
連絡を取る:

Re: 関数に 2 個の引数を指定できませんとは?

#2

投稿記事 by axis » 10年前

https://msdn.microsoft.com/ja-jp/library/z5hh6ee9.aspx
を見てみてください。
この関数には、ファイルの場所・ファイルの名前・オープンのオプション
の3つを渡さなければいけないようです

fopen_s(filename, "rb")
となっているところを、fopen_s(ファイルのパス,filename, "rb")
とすればいいと思います
ビギナーです。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 関数に 2 個の引数を指定できませんとは?

#3

投稿記事 by みけCAT » 10年前

axis さんが書きました:https://msdn.microsoft.com/ja-jp/library/z5hh6ee9.aspx
を見てみてください。
この関数には、ファイルの場所・ファイルの名前・オープンのオプション
の3つを渡さなければいけないようです

fopen_s(filename, "rb")
となっているところを、fopen_s(ファイルのパス,filename, "rb")
とすればいいと思います
私はそうは思いません。
MSVCの標準ライブラリ(?)のfopen_s関数の第一引数にはファイルのパスではなく、ファイルポインタを格納する変数へのポインタを渡さないといけません。
もしくは、素直にfopen_sではなくfopen関数を用いるといいでしょう。

似た内容の質問です。
関数に 2 個の引数を指定できませんとは? • C言語交流フォーラム ~ mixC++ ~
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
axis
記事: 10
登録日時: 10年前
住所: 山梨
連絡を取る:

Re: 関数に 2 個の引数を指定できませんとは?

#4

投稿記事 by axis » 10年前

すいません、見間違えていました
ビギナーです。

閉鎖

“C言語何でも質問掲示板” へ戻る