2016-04-29 3 views
3

私はキーをシミュレートするCで自動タイピングロボットを作成しました。Cのプログラミングで1,000,000文字列を保存する別の方法

まず、ユーザーの入力に従って段落を検索し、その段落の各文字をシミュレートします。

私は3000段落のデータベースを持っており、合計文字数は1,000,000を超えています。

ですから、すべてのデータを1文字の配列に格納することはできますか?教えてください。私はhereその大きな配列原因バッファオーバーロードをreadedいる

char database[] = {"A string with more than 1,000,000 characters"}; 
char *start_position; 
gets(s); // a small string given by user, this input is used to search which paragraph user want to simulate. 
start_postion=strstr(database, s); 
function_for_key_simulation();...... 

私のコードがあります---。 このタスクを実行する代替方法を提案してください。 char *s = "abcd";標準のような文字列リテラルの場合

+1

これは正しい答えです。配列の宣言/割り当ての方法によって異なります。しかし、どのような場合でも、15(または16)バイトのchar配列は制限を打つことはまずありません。あなたは実際のコードに特有の問題を経験していますか、あるいは単に理論的に質問していますか? – kaylum

答えて

4

がCSTD 5.2.4.1で定義されているコンパイラは、少なくとも4095文字の制限をサポートしなければならない必要があります。

実装は、少なくとも翻訳し、実行することができなければなりません次の制限の一つ一つの少なくとも1つのインスタンスを含むものプログラム:

- (連結後の)文字列リテラルで4095文字

つまり、4095文字の文字列リテラルを安全に定義できます。それを超えてより多くの文字を作ることは、コードを移植性のないものにするでしょう。いくつかのコンパイラはより多くのものといくつかのものをサポートするかもしれないので

char array[N];のように、実装とプラットフォームによって異なりますが、データを保持する大きなバッファが必要な場合は、通常は巨大な配列の作成はお勧めしません。代わりに動的割り当てメモリを使用してくださいreturn NULL)が失敗した場合、他の予期しない動作の実行時バッファオーバーフローを除きます。

関連する問題