No.4
- 回答日時:
それはちょっと乱暴すぎませんかね>#3.
任意の型 T に対し T * は const T * に自動変換可能だが逆は自動変換できない. 結果として, 仮引数の const char * に対応する実引数は char * でも const char * でも構わないのに対し, 仮引数が char * であるなら対応する実引数は char * でなければならない (const char * は不可).
さて,
char buf[256];
char *p = buf;
const char *cp = buf;
strcpy(buf, "abc");
strcpy(p, "abc");
strcpy(cp, "abc");
とやったときにどれが OK でどれが NG でしょうか?
char *strcat(char *s1, const char *s2);
ですので、
strcpy(buf, "abc"); OK
strcpy(p, "abc"); OK
strcpy(cp, "abc"); NG
ですね!仮引数の const char * に対応する実引数は char * でも const char * でも構わないのですか!
ありがとうございます!理解が深まりました!
No.3
- 回答日時:
コンパイルが通って、かつ、
思ったとおりに実行できれば、
それでよし。
何かのコードを書いたら、
まずは自分で実験してみましょう。
No.2
- 回答日時:
FILE *fopen(const char *filename, const char *mode);
これの意味は「fopenは、fopen関数の中で、filenameやmodeが指す文字列を書き換えませんよ」って意味です。
つまり
fp = fopen("TEST.TXT","wt");
などのような「リテラルな値」を指定可能である、と言う事を意味します。
一方
char *strcat(char *s1, const char *s2);
は「s1が指す文字列はstrcatの関数内で書き換える可能性があるぞ。だけどs2が指す文字列はstrcatの関数内で書き換えないぞ」って事を意味します。
つまり
char buf[256];
buf[0]='\0';
strcat(buf,"abc");
は可能だけど
const char *ptr = "";
strcat(ptr,"abc");
はやっちゃ駄目、って事を意味しています。
fp = fopen("TEST.TXT","wt");
などのような「リテラルな値」を指定可能である、と言う事を意味します
なるほど!リテラルな値が使えることを意味しているのですね!ちなみに"TEST.TXT"がリテラルってことでしょうか?
あほですいません。
No.1
- 回答日時:
constにしておけば、
不用意に書き換えようとすると
何かまずいことが起きるかも、
というくらいのものです。
当該のコードでは、argvにconstを付ける必要性はありません。
なお、argv[1]にアクセスする際は、
argcが2以上であることが必要です。
そのコードでは、実行時に何も引数を与えないままだと、
いきなり落ちてしまうことでしょう。
早速のご返信ありがとうございます。
それでは以下の場合どうですか。
FILE*ai;
charbuff[16];
CStringA;
A=_T("D:\\1.txt");
strcpy( buff, CStringA(A) );
ai=fopen(buff,"r");
A=_T("D:\\2.txt");
strcpy( buff, CStringA(A) );
ai=fopen(buff,"r");
buffは書き換わりますが、コンパイル通りますね。
それともこれは不用意な書き換わりではないので
コンパイルが通るのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# Cのdoubleの浮動小数点表示について 3 2023/04/17 13:14
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
- C言語・C++・C# C言語 共用体について コマンドライン引数で値を2つ入力したときに、argv[2]の値をUNI u1 4 2022/04/25 20:34
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のfor文です。 繰り返しの...
-
fgetsなどのときのstdinのバッ...
-
間接操作のレベルとは
-
CStringをwchar_tに変換したい
-
バイトスワップをやりたい
-
c言語でユーザ関数を利用して入...
-
C言語の入力した文字を反転させ...
-
atoi( ) の反対をやりたい
-
文字列から空白を取り除きたい...
-
Linuxでフォルダ内全ファイル名...
-
enumの記述について。
-
配列をnビットシフトする
-
ユニコード文字列の分割
-
DPマッチング
-
C言語です
-
RGB→YUV変換のプログラム
-
C言語のビットフィールドについて
-
c++ 文字列を入力して、一文字...
-
C言語のポインターで詰まっている
-
ワイルドカードを用いた文字列検索
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
charでの計算?
-
C言語のfor文です。 繰り返しの...
-
charからLPTSTRへの変換方法
-
文字列から空白を取り除きたい...
-
C言語の入力した文字を反転させ...
-
'const char *' 型は 'char *' ...
-
配列をnビットシフトする
-
str系関数を使わずに二つの文字...
-
int main()の・・・
-
atoi( ) の反対をやりたい
-
CStringをwchar_tに変換したい
-
c++ 文字列を入力して、一文字...
-
switch文で文字を比較すること...
-
干支のプログラム
-
3桁区切(コンマ)記号をつけ...
-
絶対パスからのファイル名の切...
-
間接操作のレベルとは
-
間接参照のレベルが異なっています
-
型変換
おすすめ情報