こんにちは。C言語初心者です。
文字の配列で下のようなプログラムを作ったとき、入力の際にdefineで指定したN以上の文字数の文字列を入力した場合、その後のプログラム次第で実行が正しかったり、セグメントエラーがでたりします。
コンパイルする際はエラーがでません。
※その後のプログラムとは、関数strcmpやstrcpyです。
#include <stdio.h>
#define N 10
main()
{
char a[N];
char b[N];
scanf("%s %s", a, b);
printf("%s\n", a);
printf("%s\n", b);
}
No.2
- 回答日時:
> その後のプログラム次第で
> ※その後のプログラムとは、関数strcmpやstrcpyです。
だとするならば、strcmp()やstrcpy()を含めたソース全体を載せるのが筋だとは思いませんか?
つまり、今回提示されたコードでは、
> 実行が正しかったり、セグメントエラーがでたりします。
という点がわからないのです。
言っていることが理解できますか?
No.3
- 回答日時:
多分9文字以上(終端文字があるので)の文字列を配列に入れているからでしょう。
Nの値を大きくするか、#1さんのように、文字数を指定する関数を使うのが良いと思います。
No.4ベストアンサー
- 回答日時:
っていうか、バッファをオーバーしているので当然だと思うのですが
何を質問したいのでしょうか。
書いていることだけでは質問したいことの要点が分かりません。
#define N 10
はそれより下に現れる N という定数を 10 という定数で置き換えると
いう意味です。
つまり
> char a[N];
> char b[N];
これは
char a[10];
char b[10];
と書いているのと全く同じです。
(コンパイルの前のプリプロセスで上記の変換が行われるため、
コンパイラは上記のコードとしてコンパイルします)
なので、 #define の問題ではなく、単にバッファがあふれているのが
問題です。
No.5
- 回答日時:
細かいけど、はまると痛いので一応突っ込んどくと、
#define N 10
はそれより下に現れる N という"文字列"を 10 という"文字列"で置き換えると
いう意味です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
_tcscpy_s(wcscpy_s)の第二引数...
-
TCL言語で文字列検索方法を教え...
-
プログラムによく出てくるst...
-
ASPで別サイトの内容を Stream ...
-
括弧が含まれる文字列の括弧の...
-
fgetsで配列に数字を入れる。
-
VBA-DLLの引数受け渡しについて
-
ソースコードの間違い (C言語)
-
曜日を格納する配列の大きさ
-
C#でstringをポインタとして渡す
-
C++で入力した文字列から数字を...
-
VC++6.0 MFC ダイアログバーを...
-
ExcelVBAで質問です。離れた二...
-
c言語
-
C言語 配列の長さの上限
-
パイソンの
-
mallocについて
-
Excelですべての組合せ(重複組...
-
関数から配列を返すには?
-
文字列内の数字削除
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C++で入力した文字列から数字を...
-
nullと""、\\0とEOFの違いにつ...
-
プログラムによく出てくるst...
-
%dなどの違い
-
WSH(VBS)でJSONの文字列を読み...
-
TCL言語で文字列検索方法を教え...
-
C#でstringをポインタとして渡す
-
16進数を2文字ずつ配列に格納し...
-
_tcscpy_s(wcscpy_s)の第二引数...
-
C++で文字列の右端から特定の文...
-
シリアル通信で0x00を送信した...
-
VBA-DLLの引数受け渡しについて
-
数字の入った配列をファイルへ...
-
c#で他のアプリの文字入力フォ...
-
構造体→文字列→構造体 をする方法
-
Shift_JIS(16進)を文字に変換す...
-
バイナリファイル中の日本語文...
-
C言語の課題で困っています;
-
[C++]WCHARの1文字目しか表示で...
-
VB6.0でのバイナリデータの扱い...
おすすめ情報