C++を勉強しています。
参考書(橋本麻奈さんの「やさしいC++」です。)を用いていますが、次のようなサンプルコードを入力、実行するとstrcpyとstrcatの部分に、エラーが出ました。
「オーバーロードされた関数 "strcpy_s" のインスタンスが引数リストと一致しません」や「strcat_s関数に 2 個の引数を指定できません」と表示されます。原因と解決法を教えてください。
また、参考書に書いてある程度には関数、オーバーロード、インスタンスについて学んだつもりなのですが、なぜstrcpy_s関数がオーバーロードされたと判断されたのか分かりません。
長文になりましたが、この2点についてご回答よろしくお願いします。
以下コードです
#include<iostream>
#include<cstring>
using namespace std;
class Car {
private:
int carnum;
double cargas;
char* pName;
public:
Car(char* pN, int n, double g);
Car(const Car& c);
~Car();
Car& operator=(const Car& c);
};
Car::Car(char* pN, int n, double g) {
pName = new char[strlen(pN) + 1];
strcpy_s(pName, pN); //←このような部分すべてでエラーが出ます。
carnum = n;
cargas = g;
cout << pName << "を作成しました\n";
}
Car::Car(const Car& c) {
cout << c.pName << "で初期化します\n";
pName = new char[strlen(c.pName) + strlen("のコピー1") + 1];
strcpy_s(pName, c.pName);
strcat_s(pName, "のコピー");
carnum = c.num;
cargas = c.gas;
}
(以下コード略)
No.4
- 回答日時:
>質問文では最初に「strcpyとstrcatの部分に、エラーが出ました」って書いているにもかかわらず, プログラムには strcpy も strcat も出てきていないところに注目.
strcpy()/strcat()でコンパイルしたらstrcpy_s()/strcat_s()使え。
という警告(エラーだっけ?)が出たので、機械的に置換してみました。
って感じでしょうかね。
第5版では引数3つのパターンになっているようですし。
回答ありがとうございます!
指摘していただいた通りです、、、
まだまだ未熟もいいところですね、、、精進します
なんとか解決しました!
No.3
- 回答日時:
4版でもこのプログラムではないんだよな.
質問文では最初に「strcpyとstrcatの部分に、エラーが出ました」って書いているにもかかわらず, プログラムには strcpy も strcat も出てきていないところに注目.
No.2
- 回答日時:
ソースコードは、間違っていませんか?
ここより、ソースコードをダウンロードしてみました。
http://mana.on.coocan.jp/yasac.html
の「セキュリティ強化版サンプルコード(第5版)
ダウンロードしたソースと質問にあったソースと異なります。
一度ダウンロードして、
Sample3.cpp
YCCSample\15\Sample3.cpp
を確認してみてください。
回答ありがとうございます!
僕の使っている参考書は第4版でしたので、何かしら今のバージョンに対応できていなかったのかもしれませんね、、、
試してみます
ありがとうございました
No.1ベストアンサー
- 回答日時:
似たような壁にぶちあたっている人がいるようです。
テンプレート使った2引数のものは、第1引数が配列変数名でないと要素数が取れないんじゃないかと思いますが…。
動的確保したポインタだった場合、ポインタからではサイズが取得できないかと。
となると、テンプレートでも適用できないので、引数2つを受け取るstrcpy_s()のオーバーロードと……。
回答ありがとうございます!
まだまだ僕の知識に至らぬ点が多々あったようですね、、、
指摘してくださった点もふまえてやっていきたいと思います。
ありがとうございました
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
Visual Studio strcpyについて
C言語・C++・C#
-
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
適切な変換関数が存在しない???
C言語・C++・C#
-
-
4
_tcscpy_s(wcscpy_s)の第二引数って
C言語・C++・C#
-
5
char*を初期化したいのですが
C言語・C++・C#
-
6
関数から配列を返すには?
C言語・C++・C#
-
7
CStringをwchar_tに変換したい
C言語・C++・C#
-
8
C++ で、「)」が必要 というエラー
C言語・C++・C#
-
9
エラーの原因は?「この関数の定義が見つかりません」
C言語・C++・C#
-
10
std::stringからLPCWSTR型への変換
C言語・C++・C#
-
11
#defineの定数を文字列として読み込む
C言語・C++・C#
-
12
#include <Windows.h>というヘッダファイルについて
C言語・C++・C#
-
13
C++ 構造体の一括初期化 {0}
C言語・C++・C#
-
14
CString型 全角半角を意識せずに「1文字」ずつ取り出す
C言語・C++・C#
-
15
クリティカルエラー Expression: (Buffer too small", 0)"
C言語・C++・C#
-
16
C言語、C+、C++、C#の違い
その他(パソコン・スマホ・電化製品)
-
17
CString から LPCTSTRの型に変換
C言語・C++・C#
-
18
C言語において、 配列要素をひとつずつ前にずらすコード
C言語・C++・C#
-
19
c++std::string型をTCHARに変換したい!
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
バッチからsqlplusの接続エラー...
-
適切な変換関数が存在しない???
-
Handlesについて
-
fortranでプログラムを実行する...
-
コンパイルできません。
-
sys/time.hのインクルードがで...
-
エラー: ‘inval’ の記憶サイズ...
-
エクセルでマクロを実行すると...
-
fatal error LNK1112
-
フォームの作成中にエラーが発...
-
ビルド失敗 指定されたファイ...
-
レコードセットをcloseする所で...
-
visual C++ でビルドの中止がで...
-
Excelのエラーで困ってます。
-
デバッグ中のエラーのことで教...
-
c言語をgcc.exeにコンパイルし...
-
MakeSureDirectoryPathExists
-
Fortran コンパイルエラーについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
python エラー
-
エクセルのエラーメッセージ「4...
-
適切な変換関数が存在しない???
-
Excelのエラーで困ってます。
-
バッチからsqlplusの接続エラー...
-
fortranでプログラムを実行する...
-
HEWを使用しているのですが、こ...
-
コンパイルできません。
-
デバッグ中のエラーのことで教...
-
visual C++ でビルドの中止がで...
-
BC30002: 型 'ListItem' が定義...
-
Handlesについて
-
sys/time.hのインクルードがで...
-
ビルド失敗 指定されたファイ...
-
VB2008で定数に色の設定をした...
-
RightとLeft関数のライブ...
-
multiple definitionというエラー
-
WindowsからLinuxへの移植
-
HANDLEの宣言でのエラー
-
レコードセットをcloseする所で...
おすすめ情報