• ベストアンサー

文字数の限界

つい最近、友人から「コマンドライン引数として受け取れる最大文字列数は、どれくらいかわかる?」と聞かれました。 コマンドライン引数を保存する配列の要素数を決める際に、コマンドライン引数として渡すことができる文字列の限界(または、一般的に想定している文字数)を要素数にしたいとのことだったのですが、どなたか教えていただけないでしょうか? あと、ほかに文字数の上限が設定されているようなもの(例 ファイル名など)があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • macchun
  • ベストアンサー率50% (3/6)
回答No.3

コマンドライン引数、ファイル名の長さに関してはOSと呼び出す関数に影響します。 理論的な最大値は以下の値だったと思います。 Windows 95 系: ファイル名: 255 バイト フルパス名: 259 バイト コマンドライン引数: 32,767 バイト(だと思います) Windows NT/2000/XP 系: ファイル名: 255 文字 フルパス名: 約 32,000 文字 コマンドライン引数: 32,767 文字 Linux: ファイル名: 255 バイト フルパス名: 1,023 バイト コマンドライン引数: 32 ページ弱(i386 系だと約 130,000 バイト) ただ、呼び出す関数によってはもっと短い長さで失敗することもありますのでご注意ください。

fooejiio
質問者

お礼

返信がおそくなりました。回答ありがとうございました。

その他の回答 (2)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

コマンドライン引数に関しては、既に回答が出ているように環境依存です。 ファイル名の長さも環境依存ですが、<stdio.h>で定義されているFILENAME_MAXがファイル名(正確にはパス名)の最大長を表しています。ただし、OSが長さの制限を設けていない場合には、FILENAME_MAXの値は推奨値になります。

fooejiio
質問者

お礼

返信がおそくなりました。回答ありがとうございました。

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.1

コマンドライン引数で渡される文字数の最大値は、使用するシェルとCランタイムライブラリの仕様によって決まるので、使用するシェルとCランタイムライブラリのリファレンスなどを参照してください。 ファイル名の長さの最大値は、使用するファイルシステムとCランタイムライブラリの仕様によって決まるので、使用するファイルシステムとCランタイムライブラリのリファレンスなどを参照してください。

fooejiio
質問者

お礼

返信がおそくなりました。回答ありがとうございました。

関連するQ&A

  •  ExcelのSheet数の限界

     ExcelのSheet数の限界  素朴な疑問なのですが、Excelでは、Sheet上の列数はIV列の256、行数は65536行目が最大ですが、Sheetは最大で何枚まで作成可能なのでしょうか。 (Sheet65531までは確認済み)

  • 【C言語教えて下さい!】文字検索

    引数として、複数の文字列を格納した配列、その文字列数、あるいは文字列aを与え、aが複数の文字列を格納した配列中に見つかれば1を返し、見つからなければ0を返す関数find_string()をつくりたいのですがよくわかりません。 どなたかご教授お願いします。 ヒントや考え方など教えて下さい。

  • 10進数→2進数の出力について

    コマンドライン引数から10進数の値を入力して 2進数に変換して出力しようとしています。 ※入力される10進数の値はかなり大きなものを想定しています。 現在は下記のようなコードで変換しようとしていますが失敗しています。 動作環境は『WindowsXP、Activeperl-5.12.4.1205』です。 拙い説明ですが、よろしくお願いいたします。 # コマンドライン引数は「9223372036854775808」 $n = unpack("B8", pack("C", $ARGV[0])); print n; # 実行結果は「11111111」 # 期待している出力結果は「1000・・・000」(←0が64個) 9223372036854775808

    • ベストアンサー
    • Perl
  • (VBAにて)シート間のコピーの文字数限界ついて

    質問が抽象的ですみませんが、質問させて頂きますので 宜しくお願いします。 (まだVBAの日が浅い者です。) ・Excelにて障害管理表というものを作成しています。(sheet1に)  ・発生日時や障害内容などが列ごとに管理されている表です。  ・各項目名がA3~Y3で各データがA4~Y60まで入力されています。)  ・今後も障害が発生することにより、行数が増えていきます。 ・sheet2について  ・マクロ用の専用シートにしています。  ・コマンドボタンを作成し、そこにマクロ文を挿入しています。  ・マクロ文の内容は、sheet1の[F列:発生日時]をキーにして、   sheet2の「セルA1→開始年月]「セルB2→終了年月]を入力して   コマンドボタンを押す  ・sheet1よりsheet3に指定した期間内のみデータを表示させる。 というのが大筋の内容です。 大体うまく行きましたが、1つだけ問題点が出ました。  ・[sheet1のP列]には対応内容のデータが入力されています。  ・sheet3のP列にほぼコピーは出来たのですが、2件ほどが   sheet3のP列に反映されず、空白のままとなってしまいます。  ・調べてみると、2件ともかなりの文字数がsheet1のP列に入力されていました。  (実際は) マクロ文を実行すると、下記のエラーが出て処理がSTOPしてしまいます。   「実行時エラー'1004': アプリケーション定義またはオブジェクト定義のエラーです。」        ↓ (P列の長い文字数をsheet1~sheet3へコピーする所です。 ですので、「On Error GoTo 0~On Error Resume Next」コマンドを使用してエラーを吹っ飛ばして処理を続行しています。(2件は反映されませんが。) ・シート間でセル内容をコピーする時の文字数の限界ってあるのでしょうか? ・また、どのようにすれば解消されるでしょうか?    ・因みに、sheet1の例の2件の文字数をかなり削除したらうまく行きました。)    ・sheet1の例の2件の文字数を削らず、sheet3のP列の文字を小さく設定してもセルを最大に広げてもダメでした。) 長くなって申し訳ありませんが宜しくお願い致します。 

  • エクセル2003 string型のデーターの所定文字数の数の取得

    いつもアドバイス頂きありがとうございます。 今回、質問させていただきたいのは、 string型でデーターを取得した文字列に対して ある文字の文字数がいくつ在るかを取得したいのですが VBA関数で、そのような関数はあるのでしょうか? 例  myDataにstring型の文字列を取得してあります。 その中に「,」(カンマ)が何個存在するかと言う事 を取得したい。 やりたい事として、mydata()の中に2次元配列要素となるデーターを 1次元で仮格納してあり、それをセルに書き出すために2次元 に格納(splitで再格納)しなおしているのですが、データーが変わる たびに、カンマの数を数えて配列宣言を記入するのが面倒なので、 カンマの数がいくつでも、2次元に再格納できるようにしたいためで す。 宜しくお願いいたします。

  • 配列とその要素数をメンバにもつ構造体

    C言語では,配列を引数とするときに,合わせて要素数を渡さなければいけないといわれます. そこで,配列とその要素数をメンバにもつ構造体を定義して,これを要素数つき配列のように扱えば,引数として渡す場合には,この構造体を渡すだけでよいと思うのですが,このような用法は一般的に用いられているでしょうか. 単純なアイデアだと思うんですが,あまり紹介されているのを見たことがありません. もしあまり用られない用法であれば,その理由を教えてください. 現在,プログラムを書いているのですが,引数の多さに閉口しており,上の考えで,引数を減らしたいと考えています.  よろしくお願いいたします.

  • C言語について教えてください。

    二次元配列でまとめられた「配列で実現する文字列」の文字と文字列を表示する関数を定義し、その関数の機能を確認するプログラムを作成する。 ただし、以下の例のように文字列の個数が変更されても処理できる関数を作成する。 また、文字列の文字の個数は最大9とする(一次元配列の要素数は10とする) さらに、関数printf()をできるだけ用いない。 (1)二次元配列でまとめられたすべての文字列を「一度に」表示する関数を定義する (2)二次元配列でまとめられたすべての文字列の文字を「一度に」表示する関数を定義する。このとき、前回の課題で定義した「すべての文字を表示する関数print_all_char()」を新しく定義する関数から呼び出して用いる。 (3)二次元配列に各文字列を格納してまとめるとき、初期化ではなく、配列の宣言・定義の後で、関数strcpy()を用いること(例では、初期化によりまとめている) [例] char astr[][10] = { "ABCD", "EFGHIJ", }; [実行結果の例] すべての文字列の表示 ABCD EFGHIJ すべての文字列の文字の表示 A B C D E F G H I J [ヒント] (1)二次元配列でまとめられた文字列の文字あるいは文字列を表示する関数<返却値型><関数名>(二次元配列の受け渡しに対応した仮引数の宣言、文字列の数) (2)文字列の数を求める。二次元配列のすべての要素に文字列が格納されている場合、文字列の数=二次元配列の要素数(一次元配列の数) =sizeof(astr)/sizeof(astr[0]) ただし、sizeof演算子の生成する型はsize_t型である。 この問題について教えてください。問題丸投げだとは分かっていますがどうしても分かりません。教えてください。ちなみに前回の課題の定義は下の通りです。 void print_all_char(char *chs) { while(*chs!='\0') { printf("%c\n",*chs); chs++; } } よろしくお願いします。

  • oracle、DB2、SqlServerのフィールド数の限界について教えてください。

    タイトルの通り、 ・Oracle ・DB2 ・SqlServer この3つのデータベースのフィールド数の限界を教えて頂きたいです。 また、それぞれのRDBMSの文字列型の最大の長さを教えて頂きたいです。 ご存知の方、よろしくお願いします。

  • CreateProcessのコマンド・ライン文字列

    ■開発環境:VisualStudio2005 VC++ CreateProcessの第2引数についての質問なのですが、 第二引数は実行するコマンドライン文字列となりますが、この引数のサイズがある一定のサイズを超えるとCreateProcessの実行でエラーになります。 その場合のGetLastError()の番号は87=ERROR_INVALID_PARAMETERです。 どうも、CreateProcessの第2引数のサイズに上限があるように思います。 どなたこのあたりの情報を持っておられる方いますでしょうか? 以上、ご教授よろしくお願いします。

  • 配列の要素数を調べる方法

    配列の中にいくつ要素があるか後から調べる方法はあるでしょうか? int test[4][3] = {   {0,1,2},   {0,1,2},   {0,1,2},   {0,1,2}, } ; 上のケースだと、X方向に3、Y方向に4つの 要素があります。しかし、これだとあらかじめいくつ要素があるかを決めて 置かないといけません。 例えば、 int test[] = {0,1,2,3....} みたいに宣言された場合や、 char *test[] = {   "ああああああ",   "いいいいいい",   "うううううう",      ・      ・ //(これは文字列の数を要素数とします) } ; のように宣言された二次元配列などで、後から配列内にいくつ要素があるかを 調べることなどは可能でしょうか?