半角1000文字程度の文字列をscanfで読み込んで配列に格納し
それを処理するというプログラムを作っています。
しかし実行してみると、入力待ち画面で500字程度しかキーボード入力ができません(カーソルが進まなくなる)
scanfではなくgetcharで1文字ずつ読み込んでいく形式も試してみましたが同じ結果になりました。
これはコマンドプロンプトの限界でしょうか?
それとも領域が確保できないなどプログラム側の問題でしょうか?
だとすれば、どのように改善すればいいのでしょうか。
どなたかご教授いただけたらと思います。
よろしくお願いします。
実行時の入力文字数限界
Re: 実行時の入力文字数限界
原因は分かりませんが、
入力が1000文字もあるならコマンドラインからではなく
ファイルから読み込むのが普通だと思います。
入力が1000文字もあるならコマンドラインからではなく
ファイルから読み込むのが普通だと思います。
Re: 実行時の入力文字数限界
ありがとうございます。
ファイルから読み込むようにすれば解決する問題なのは承知しているのですが、
用途の都合上
できればいちいちテキストファイルを作成せず実行画面に直接コピペなどで
入力できればいいな、と考えておりまして・・・
プログラム実行時ではない普通のコマンドプロンプトのコマンドラインには
2000文字くらいでも入力できるので
原因がわからなくてもやもやしています。
ファイルから読み込むようにすれば解決する問題なのは承知しているのですが、
用途の都合上
できればいちいちテキストファイルを作成せず実行画面に直接コピペなどで
入力できればいいな、と考えておりまして・・・
プログラム実行時ではない普通のコマンドプロンプトのコマンドラインには
2000文字くらいでも入力できるので
原因がわからなくてもやもやしています。
Re: 実行時の入力文字数限界
プログラム側に問題があるかどうかは、ソースコードを見てみないことにはXenon さんが書きました: それとも領域が確保できないなどプログラム側の問題でしょうか?
だとすれば、どのように改善すればいいのでしょうか。
何ともいえません。
改善策についても同様です。今のソースがどうなっているかわからないので、改善策の提示のしようがありません。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: 実行時の入力文字数限界
環境は ?
たとえば、DOS だと、128 文字(127 文字 + 改行 だったっけ ?) までしか入力できません。
あたっしゅ
「ご教授(きょうじゅ)」は「ご教示(きょうじ)」では ?
たとえば、DOS だと、128 文字(127 文字 + 改行 だったっけ ?) までしか入力できません。
あたっしゅ
「ご教授(きょうじゅ)」は「ご教示(きょうじ)」では ?
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。
中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。
Re: 実行時の入力文字数限界
CRTのコンソール入力ルーチンの問題でしょうね。
コマンドプロンプト側ではなくプログラム側の問題ですが、処理系に含まれる標準ライブラリの問題です。
処理系(コンパイラ)によって違うと思います。
ちなみに、VisualC++2010ExpressSP1でコンパイルしてWin7(x64)のコマンドプロンプトで動かしたプログラムでは、シングルバイト文字で1000文字の入力ができることは確認できました。
コマンドプロンプト側ではなくプログラム側の問題ですが、処理系に含まれる標準ライブラリの問題です。
処理系(コンパイラ)によって違うと思います。
ちなみに、VisualC++2010ExpressSP1でコンパイルしてWin7(x64)のコマンドプロンプトで動かしたプログラムでは、シングルバイト文字で1000文字の入力ができることは確認できました。
Re: 実行時の入力文字数限界
返信が遅くなりすみません。
>boxさん
実際にはもっと複雑ですが、
ほんのこれだけのプログラムでも件の入力できない症状が現れます(確認しました)
scanfではなくgetcharで一文字ずつ読み込む形式でも駄目だったので
ソースコードの問題ではないだろうと勝手に判断してしまい記載していませんでした。すみません。
>あたっしゅさん
CPad for Bordland C++ Compilerでコンパイルして
WinXPのcmd.exeで動かしています。
こんなネット上の質問掲示板で「ご教授ください」は確かに大仰しいですね。
ご指摘ありがとうございます。
>ISLeさん
なるほど、コンパイラを違うものにしてみる価値はありそうですね。
試してみます。ありがとうございました。
>boxさん
#include <stdio.h>
#include <string.h>
int main(void)
{
enum{N = 1000};
char s[N];
printf("文字列を入力してください\n");
scanf("%1000[acgtACGT]", s); /* 1000文字を超えたら読み込まない */
/* acgtACGT以外の入力があれば読み込みを中止する */
printf("\n%s\n", s);
return 0;
}
ほんのこれだけのプログラムでも件の入力できない症状が現れます(確認しました)
scanfではなくgetcharで一文字ずつ読み込む形式でも駄目だったので
ソースコードの問題ではないだろうと勝手に判断してしまい記載していませんでした。すみません。
>あたっしゅさん
CPad for Bordland C++ Compilerでコンパイルして
WinXPのcmd.exeで動かしています。
こんなネット上の質問掲示板で「ご教授ください」は確かに大仰しいですね。
ご指摘ありがとうございます。
>ISLeさん
なるほど、コンパイラを違うものにしてみる価値はありそうですね。
試してみます。ありがとうございました。
Re: 実行時の入力文字数限界
GCCでコンパイルしたところ解決しました。
どうやらCPad for BCCでのコンパイルではコマンドラインからの入力限界が
512バイト(実際には半角510字でしたが)に定められてしまうようです。
普段はそこまで長い文字列を入力することがないので気付かなかったのですが、
処理系の違いはこういうところにも出るんですね。
何はともあれ解決しました。皆様、どうもありがとうございました。
どうやらCPad for BCCでのコンパイルではコマンドラインからの入力限界が
512バイト(実際には半角510字でしたが)に定められてしまうようです。
普段はそこまで長い文字列を入力することがないので気付かなかったのですが、
処理系の違いはこういうところにも出るんですね。
何はともあれ解決しました。皆様、どうもありがとうございました。