ページ 11

実行時の入力文字数限界

Posted: 2011年10月13日(木) 18:54
by Xenon
半角1000文字程度の文字列をscanfで読み込んで配列に格納し
それを処理するというプログラムを作っています。
しかし実行してみると、入力待ち画面で500字程度しかキーボード入力ができません(カーソルが進まなくなる)
scanfではなくgetcharで1文字ずつ読み込んでいく形式も試してみましたが同じ結果になりました。
これはコマンドプロンプトの限界でしょうか?
それとも領域が確保できないなどプログラム側の問題でしょうか?
だとすれば、どのように改善すればいいのでしょうか。
どなたかご教授いただけたらと思います。
よろしくお願いします。

Re: 実行時の入力文字数限界

Posted: 2011年10月13日(木) 19:01
by Xenon
すみません、追記です。
言語はCです。

Re: 実行時の入力文字数限界

Posted: 2011年10月13日(木) 19:25
by h2so5
原因は分かりませんが、
入力が1000文字もあるならコマンドラインからではなく
ファイルから読み込むのが普通だと思います。

Re: 実行時の入力文字数限界

Posted: 2011年10月13日(木) 19:59
by Xenon
ありがとうございます。
ファイルから読み込むようにすれば解決する問題なのは承知しているのですが、
用途の都合上
できればいちいちテキストファイルを作成せず実行画面に直接コピペなどで
入力できればいいな、と考えておりまして・・・

プログラム実行時ではない普通のコマンドプロンプトのコマンドラインには
2000文字くらいでも入力できるので
原因がわからなくてもやもやしています。

Re: 実行時の入力文字数限界

Posted: 2011年10月13日(木) 21:59
by box
Xenon さんが書きました: それとも領域が確保できないなどプログラム側の問題でしょうか?
だとすれば、どのように改善すればいいのでしょうか。
プログラム側に問題があるかどうかは、ソースコードを見てみないことには
何ともいえません。
改善策についても同様です。今のソースがどうなっているかわからないので、改善策の提示のしようがありません。

Re: 実行時の入力文字数限界

Posted: 2011年10月13日(木) 22:17
by あたっしゅ
環境は ?
たとえば、DOS だと、128 文字(127 文字 + 改行 だったっけ ?) までしか入力できません。


あたっしゅ


「ご教授(きょうじゅ)」は「ご教示(きょうじ)」では ?

Re: 実行時の入力文字数限界

Posted: 2011年10月13日(木) 23:20
by ISLe
CRTのコンソール入力ルーチンの問題でしょうね。
コマンドプロンプト側ではなくプログラム側の問題ですが、処理系に含まれる標準ライブラリの問題です。

処理系(コンパイラ)によって違うと思います。
ちなみに、VisualC++2010ExpressSP1でコンパイルしてWin7(x64)のコマンドプロンプトで動かしたプログラムでは、シングルバイト文字で1000文字の入力ができることは確認できました。

Re: 実行時の入力文字数限界

Posted: 2011年10月14日(金) 01:40
by Xenon
返信が遅くなりすみません。

>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: 実行時の入力文字数限界

Posted: 2011年10月14日(金) 02:27
by Xenon
GCCでコンパイルしたところ解決しました。
どうやらCPad for BCCでのコンパイルではコマンドラインからの入力限界が
512バイト(実際には半角510字でしたが)に定められてしまうようです。
普段はそこまで長い文字列を入力することがないので気付かなかったのですが、
処理系の違いはこういうところにも出るんですね。

何はともあれ解決しました。皆様、どうもありがとうございました。