No.3ベストアンサー
- 回答日時:
No2のかたが言われているように、strcpyを使用して、文字列を設定します。
厳密に言えば、strcpyの他にも方法はありますが、現時点では、strcpyと覚えておけばよいでしょう。
但し、strcpyを使用する場合、一点、必ず、守らなければいけないことがあります。
それは、呼び出し元のサイズ(今回は20バイト)を超えるサイズを設定してはいけないということです。
もし、strcpy(ch,"ABCDEFGHIJKLMNOPQRSTUVZWYZ");
を行うと、コンパイルは正常に終了しますが、呼び出し側で確保した20バイトを突き破りメモリの設定を行います。
その結果、異常終了します。(場合によっては、異常終了せずに、正常のようにみえることもあります)
----------------------------------------------------
#include<stdio.h>
#include<string.h>
void sub( char *ch ); //プロトタイプ宣言
int main(){
char str[20]; // sub内で加工した文字列を受け取る配列
sub( str );
printf("%s",str); //受け取った結果を印字
}
void sub( char *ch ){
strcpy(ch,"ABCD"); // この値をmainプログラム内でつかいたい
}
-----------------------------------------------------
実行結果
ABCD
ポインタをきちんと理解できておらず、困っていました。
考え方は変数の場合とおなじでしょうか。
たとえば、
main 関数で、
sub( str ); として、sub関数をよんだときの、引数strは 配列strのアドレスなのでしょうか。 とすると、呼び出し側の引数はアドレスで、呼び出される関数の引数はポインタとするということでしょうか。
これでいくらか理解できました。
ありがとうございました。
No.4
- 回答日時:
sub の引数を char ch[] とすれば良いです。
(char ch[20]ではないことに注意)
これで ch="ABCD"; はエラーになるはず。
ch[0]='A';
ch[1]='B';
ch[2]='C';
ch[3]='D';
ch[4]='\0';
と、配列として正しい処理をすれば、main に反映されます。
No.2
- 回答日時:
strcpy()関数で、chの指す配列に文字列データ"ABCD"をコピーすればよいと思います。
つまり
ch="ABCD";
の代わりに、
strcpy("ABCD",ch);
ですね。
ちなみに
ch="ABCD";
では、せっかく呼び出し側が教えてくれたchの指す配列場所を忘れて、
chに "ABCD" を指させることになってしまいます。
(うる覚えなのでパラメタの指定は逆にstrcpy(ch,"ABCD");かもしれません。ちゃんと調べてから使ってくださいね)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列を使わずに、変数名を動的...
-
C言語 配列の長さの上限
-
配列で格納したものをmsgboxで...
-
パスカルの三角形
-
VBAで配列からbmp画像を出力す...
-
配列の参照渡しで型が一致しま...
-
【C言語】配列の中に配列を入れ...
-
テキストファイルから文字列を...
-
配列をEraseしてもメモリが開放...
-
ExcelVBAで質問です。離れた二...
-
現在、C/C++ で作成したプログ...
-
C言語で特定列だけを抽出して配...
-
【速いブラインドタッチ】手を...
-
動的に作成した構造体配列の中...
-
配列を含む構造体の初期値について
-
構造体配列を引数とするDLL作成...
-
c言語での文字列の渡し方
-
プログラムが書けません。
-
C# Listを使わずに2次元配列の...
-
C# 配列の変数宣言について。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
先頭アドレスとは何ですか?
-
配列で格納したものをmsgboxで...
-
C# Listを使わずに2次元配列の...
-
C# 配列の変数宣言について。
-
テキストファイルから文字列を...
-
配列の参照渡しで型が一致しま...
-
ExcelVBAで質問です。離れた二...
-
unsigned char配列への入力の仕方
-
VBで構造体の配列を関数に渡す...
-
C++ vectorに配列をプッシュしたい
-
C言語で特定列だけを抽出して配...
-
Excel、VBAのユーザーフォーム...
-
複数の選択範囲の行番号を個別...
-
配列をEraseしてもメモリが開放...
-
配列を含む構造体の初期値について
-
【速いブラインドタッチ】手を...
-
C言語 配列の再初期化
-
Redimした動的配列はEraseする...
おすすめ情報