実行時の入力文字数限界

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Xenon

実行時の入力文字数限界

#1

投稿記事 by Xenon » 12年前

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

Xenon

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

#2

投稿記事 by Xenon » 12年前

すみません、追記です。
言語はCです。

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

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

#3

投稿記事 by h2so5 » 12年前

原因は分かりませんが、
入力が1000文字もあるならコマンドラインからではなく
ファイルから読み込むのが普通だと思います。

Xenon

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

#4

投稿記事 by Xenon » 12年前

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

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

box
記事: 2002
登録日時: 13年前

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

#5

投稿記事 by box » 12年前

Xenon さんが書きました: それとも領域が確保できないなどプログラム側の問題でしょうか?
だとすれば、どのように改善すればいいのでしょうか。
プログラム側に問題があるかどうかは、ソースコードを見てみないことには
何ともいえません。
改善策についても同様です。今のソースがどうなっているかわからないので、改善策の提示のしようがありません。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
あたっしゅ
記事: 664
登録日時: 13年前
住所: 東京23区
連絡を取る:

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

#6

投稿記事 by あたっしゅ » 12年前

環境は ?
たとえば、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, 電子ブロック 持ち。

ISLe
記事: 2650
登録日時: 13年前
連絡を取る:

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

#7

投稿記事 by ISLe » 12年前

CRTのコンソール入力ルーチンの問題でしょうね。
コマンドプロンプト側ではなくプログラム側の問題ですが、処理系に含まれる標準ライブラリの問題です。

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

Xenon

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

#8

投稿記事 by Xenon » 12年前

返信が遅くなりすみません。

>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さん
なるほど、コンパイラを違うものにしてみる価値はありそうですね。
試してみます。ありがとうございました。

Xenon

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

#9

投稿記事 by Xenon » 12年前

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る