K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[1207] Re:os
投稿者:つよし
2009/01/24 23:10:30

前橋さん は、Winndowsな人ですね!? オープンソースlinuxなUFOゲームは、作れないのかな!? ちなみに、web閲覧位にしか使いませんが 僕は、linux,macosxな人です。 オープンソースでは、ありませんが MacOSXのインターフェースは、Windouseの比では、ありません。 windows,osの2バージョン位 進んでいます。 対応アプリは、windowsが圧倒しています。 macのハード1社独占は、いかがなものか(麻生節) オープンソース Linux の UFO 期待します。 前橋言語で金儲け考えていないのであれば、Linuxでどうぞ! いま、酒飲んでます。自身:醒めたらこの文どうかんじるかなぁ
[この投稿を含むスレッドを表示] [この投稿を削除]
[1206] Re:os
投稿者:(ぱ)こと管理人
2009/01/11 00:25:15

>ここが解せないんですよ。たとえば >int >dvm_mbstowcs_len(const char *src) >{ > return mbstowcs(NULL, src, 0); >} >で良い筈なので、繰り返しは必要ないと思うんですが... やったのがかなり昔のことなのでもはや覚えていないのですが、 考えられる原因としては、以下のようなものが考えられます。 (1)Windowsでは、mbsrtowcs()だけでなくてmbstowcs()も動かなかった。  →当時はXPだったのですが、今Vistaで試したらあっさり両方動いてしまったので   検証不能です… (2)mbstowcs()なら動いたが、rがついていないのでよろしくない関数だと  思い込んでいた。  →この使い方なら、mbstowcs()側に状態を覚えさせないので、問題ないと   思いますが。 (3)mbstowcs()の第1引数にNULLを渡すと変換を行わない、という仕様を知らなかった。  →実のところ現在は完璧に忘れていました。当時はちゃんとマニュアル読んだので、   知らなかったということはないと思うのですが…
[この投稿を含むスレッドを表示] [この投稿を削除]
[1205] Re:os
投稿者:kit
2009/01/09 12:50:45

>で、manの続きを読むと、 > > This representation is recommended over --all-locates one, > due being the system wide supported values. > >(超訳)この(SUPPORTEDファイルの)表現は、locale -a で出てくるヤツより推奨される。 >なぜならシステム全体でサポートされてるものだから。 > >なんて書かれていて、それなりのポリシーはあるようですが……。 >歴史的ないざこざがあったのでしょうなぁ。 まあ Linux の世界に限れば、 http://web.archive.org/web/20040114120121/http://www.openi18n.org/docs/text/LocNameGuide-V11.txt という標準が決まっているので、ja_JP.EUC-JP の方が正式と言えば正式です。 しかし、この標準を決めた時点で、既に Linux を含む全ての UNIX 系 OS で ja_JP.eucJP が使える状態にあり、互換性のためには当然 ja_JP.eucJP を 引き続きサポートする必要もあったわけで、実質的には混乱の種を増やした だけだったと私は思ってます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1204] Re:os
投稿者:kit
2009/01/09 12:10:51

>また、mbstowcs()とかは引数にlenを取りますが、実際の文字列長に上限を >置くわけにはいかないので、どうせ繰り返し呼ぶなら1文字ずつやるほうが >(効率を考えなければ)楽なこと、 ここが解せないんですよ。たとえば int dvm_mbstowcs_len(const char *src) { return mbstowcs(NULL, src, 0); } で良い筈なので、繰り返しは必要ないと思うんですが... (第一引数が NULL の場合、mbstowcs() は第三引数を無視します。) dvm_mbstowcs() の方は len 用に引数が一つ増えてしまいますが、呼び出し側では 当然 len は分かっている筈なので、それでも構わないというか、今時のコーディング スタイル的にもその方が良いんじゃないでしょうか? (len が分かってないのに dvm_mbstowcs() を呼ぶなんていうのは、設計上の誤りな わけですから)
[この投稿を含むスレッドを表示] [この投稿を削除]
[1203] Re:os
投稿者:yuya
2009/01/09 10:03:05

>ただ、Ubuntuだとxdmで文字コードが選べるのですが、そこでEUCを選んだ >時のデフォルトのLANGはやっぱりja_JP.EUC-JPなんですよね… 私もUbuntu使っていますが、localeのmanページに FILES: /usr/share/i18n/SUPPORTED List of supported values とあり、ファイルを覗くと ja_JP.EUC-JP がエントリーされていますね。 で、manの続きを読むと、 This representation is recommended over --all-locates one, due being the system wide supported values. (超訳)この(SUPPORTEDファイルの)表現は、locale -a で出てくるヤツより推奨される。 なぜならシステム全体でサポートされてるものだから。 なんて書かれていて、それなりのポリシーはあるようですが……。 歴史的ないざこざがあったのでしょうなぁ。 あと、前回の投稿で、他人のマシンでsudoを試させるような書き方をしてしまい、すみませんでした。 (locale -a の結果は ja_JP.ccb となります。)
[この投稿を含むスレッドを表示] [この投稿を削除]
[1202] Re:os
投稿者:(ぱ)こと管理人
2009/01/09 01:53:16

>>標準の mbstowcs() や wcstombs() を使わずに、dvm_mbstowcs() や >>dvm_mbstowcs_len() を用意している理由も良く分かりませんでした。 > >これらは、現状ではmbstowcs()とかの単なるラッパ関数です。 訂正です。dvm_mbstowcs()等に関しては単なるラッパではないですね。 理由のひとつは、昔 http://kmaebashi.com/programmer/devlang/regexp.html にちょっと書いたのですが、少なくとも当時の私には、Windowsで mbsrtowcs()を動かすことができなかったため(rなしの方は動いたんだったかな)、 また、mbstowcs()とかは引数にlenを取りますが、実際の文字列長に上限を 置くわけにはいかないので、どうせ繰り返し呼ぶなら1文字ずつやるほうが (効率を考えなければ)楽なこと、 あたりが理由だったと思います。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1201] Re:os
投稿者:(ぱ)こと管理人
2009/01/09 00:06:34

こんにちは。いつもお世話になります。 >ja_JP.eucjp と設定しても動きます。 本当だ。今試したところ動きました。 前に試したときは動かなかったと思うのですが、なにかミスしていたようです。 >日本語EUC locale 名としては ja_JP.eucJP を使うのが最も一般性があり、 >Linux に限らず、多くの UNIX 系 OS で通用するので、そちらを勧めます。 ただ、Ubuntuだとxdmで文字コードが選べるのですが、そこでEUCを選んだ 時のデフォルトのLANGはやっぱりja_JP.EUC-JPなんですよね… >#include <limits.h> して MB_LEN_MAX を使わないのはなぜなんでしょう? これは単純に知りませんでした。毎度ながらご指摘ありがとうございます。 >標準の mbstowcs() や wcstombs() を使わずに、dvm_mbstowcs() や >dvm_mbstowcs_len() を用意している理由も良く分かりませんでした。 これらは、現状ではmbstowcs()とかの単なるラッパ関数です。 わざわざ1枚かぶせている理由ですが、たとえばどこかのタイミングで 独自の変換テーブルを持つようにする、といった改修を行う可能性はあると 思っています。実際、今回こうやっていくつかの環境で動かないのを 目の当たりにすると、内部コードなんかユニコード固定でいいし 日本語以外に対応しなくてもいいから、全部自前でやりたい、という気にも なりますです……
[この投稿を含むスレッドを表示] [この投稿を削除]
[1200] Re:os
投稿者:yuya
2009/01/07 15:49:13

ごぶさたしています。今年もよろしくお願いします。 >そもそも私の環境でも >ja_JP.eucjp >は出ても、 >ja_JP.EUC-JP >は出ないんですよね。 % sudo localedef -i ja_JP -f euc-JP ja_JP.C-C-B とでも入れてみて、懐かしのバンド名を使ったダミーのロケールを作り、すぐ消そうとしても % sudo localedef --delete-from-archive ja_JP.C-C-B locale "ja_JP.C-C-B" not in archive あれ?と思って % locale -a とすると……。kitさんのおっしゃるとおり、変態的であることを垣間見ることができますね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1199] Re:os
投稿者:kit
2009/01/07 13:57:56

>>Debian(etch) にて >>上の方にある同じ abort エラーがでました. この etch のエラーは、日本語EUC localeがインストールされてないため出ている エラーでしょう。Debian でのやり方は知りませんが、日本語 EUC locale をイン ストールすれば直るのでは? つまりdiksamではなく、利用環境の側の問題だと思います。 >>% printenv LANG >>ja_JP.EUC-JP >>% locale -a >>locale: Cannot set LC_CTYPE to default locale: No such file or directory >>locale: Cannot set LC_MESSAGES to default locale: No such file or directory >>locale: Cannot set LC_COLLATE to default locale: No such file or directory >>C >>POSIX >>ja_JP.utf8 > >locale -aで出てこないものをLANGにセットしても無駄だ、というのが >マニュアル的な解釈だと思うのですが、 そうです。したがって、locale -a で ja_JP.eucjp が表示されるような環境設定が必須です。 >そもそも私の環境でも > >ja_JP.eucjp > >は出ても、 > >ja_JP.EUC-JP > >は出ないんですよね。でも、LANGやsetlocaleで効くのはja_JP.EUC-JPのほうで、 >ja_JP.eucjpではないという。 ja_JP.eucjp と設定しても動きます。 Linux の locale 名解釈ルーチンは変態的で、ja_JP.EUC-JP, ja_JP.eucjp, ja_JP.eucJP を全て同一視します。こんな動作をするUNIX系OSは、知る限り Linuxだけです。 日本語EUC locale 名としては ja_JP.eucJP を使うのが最も一般性があり、 Linux に限らず、多くの UNIX 系 OS で通用するので、そちらを勧めます。 あと、 #define MULTIBYTE_CHAR_SIZE_MAX (6) というのは良くないコーディングスタイルだと思うんですが、 #include <limits.h> して MB_LEN_MAX を使わないのはなぜなんでしょう? (Linux の場合でも MB_LEN_MAX は 16、NetBSD あたりだと MB_LEN_MAX は 32 です。) 標準の mbstowcs() や wcstombs() を使わずに、dvm_mbstowcs() や dvm_mbstowcs_len() を用意している理由も良く分かりませんでした。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1198] Re:os
投稿者:(ぱ)こと管理人
2009/01/05 01:36:22

>Debian(etch) にて >上の方にある同じ abort エラーがでました. 情報提供ありがとうございます。 >status. -1. errno=84: Invalid or incomplete multibyte or wide character >[28] src=不正なマルチバイト文字です。 >status. -1. errno=84: Invalid or incomplete multibyte or wide character >len=-1 >Assertion failure (wc_format != NULL) file..error.c line..92 >wc_format is null. >Assertion failure (wc_format != NULL) file..error.c line..92 >wc_format is null. >Abort これは、現象としては、明らかにerror_message.c内の日本語エラーメッセージを マルチバイト文字列に変換しようとしているところで失敗していることに起因する エラーです。詳細な情報ありがとうございます。 ……と、ここまではすぐにわかるのですが、原因のほうは私にはさっぱりです。 >% printenv LANG ja_JP.EUC-JP >% locale -a >locale: Cannot set LC_CTYPE to default locale: No such file or directory >locale: Cannot set LC_MESSAGES to default locale: No such file or directory >locale: Cannot set LC_COLLATE to default locale: No such file or directory >C >POSIX >ja_JP.utf8 locale -aで出てこないものをLANGにセットしても無駄だ、というのが マニュアル的な解釈だと思うのですが、そもそも私の環境でも ja_JP.eucjp は出ても、 ja_JP.EUC-JP は出ないんですよね。でも、LANGやsetlocaleで効くのはja_JP.EUC-JPのほうで、 ja_JP.eucjpではないという。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1197] Re:os
投稿者:つよし
2009/01/04 14:15:52

Vine4.2で試行しました。 OK!!です。 $ sh test.sh test array class01 class02 class03 method cast classmain downcast instanceof super exception shapemain throws nullpointer array_ex else_ex test switch final do_while enum delegate rename こちらのMacOSXは、開発環境がうまくインストール出来ているか疑問です? 他の人の追試を、、、、。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1196] Re:os
投稿者:つよし
2009/01/04 14:05:11

MacOSXで試行しました。 $ sh test.sh test 276,277c276,277 < str[0]..26085 < str[1]..26412 --- > str[0]..50940 > str[1]..52188 279c279 < str[2]..35486 --- > str[2]..47340 array class01 class02 class03 method cast classmain downcast instanceof super exception shapemain throws nullpointer array_ex else_ex test switch final do_while enum delegate rename
[この投稿を含むスレッドを表示] [この投稿を削除]
[1195] Re:os
投稿者:(ぱ)こと管理人
2009/01/04 09:23:39

昨日は帰省してネットから切り離された上、風邪で実家で寝込んでまして、 すっかり遅くなりましてすみません。 >>(2)725~728行目のみをコメントアウト … >----上の変更を加えて sh test.sh を実行 これでかなり原因が絞れました。ありがとうございます。 最近追加した文字リテラル関連でバグを入れてしまったかな、と思い、 追求したところ、怪しいところがあっさり見つかりました… compiler以下のstring.cの中に、以下の関数があります(59行目)。 int dkc_close_character_literal(void) { DVM_Char buf[1]; ここの 誤) DVM_Char buf[1]; を 正) DVM_Char buf[2]; に直してコンパイル/実行を試していただけますか。 # mainの下でmakeするだけではここのコンパイルは通らないので、 # compilerの下でいったんmakeしてからmainの下でもmakeするか、 # mainの下で touch main.c してからmainの下でmakeしてください。 ここは文字リテラル(「'本'」のような1文字の定数)の値を抽出しているところで、 1文字であることはその前後の判定で明らかなので、1文字分のバッファを取っておけば よいかと思っていたのですが、 dvm_mbstowcs(st_string_literal_buffer, buf); 実際に変換しているこの関数では、末尾にL'\0'を補っているので、 領域破壊が起きていました。末尾ナル文字分を忘れるとは初心者並みのポカでした。 4バイトかそこらのスタック領域の破壊だと、(現にうちの環境で動いていたように) たまたま動いてしまう場合も多く、つよしさんのところでこの現象で死んでいるか どうかはわかりませんが、可能性は高いと思います。 いろいろと情報いただきありがとうございました。送球に修正してリリースします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1194] diksam テスト中
投稿者:つよし
2009/01/04 08:33:15

前橋さんの言語 diksam のテスト中です。 どなたか検証お願いします。(前橋さんに変わって書き込み??) EUC-jpの環境 http://kmaebashi.com/programmer/devlang/diksam_0_4_02_unix.tgz UTF-8の環境 http://kmaebashi.com/programmer/devlang/diksam_0_4_02_unix_utf8.tgz コンパイルは、UNIX版は上記ソースを展開したディレクトリの mainフォルダの下でmake!! また、その下の test ディレクトリで sh test.sh を実行して結果を教えてください!! お願いします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1193] Re:os
投稿者:つよし
2009/01/03 11:52:41

・Linux(Vine Linux 4.2)  →utf-8では正常動作  →EUCでは、××× ・MacOS  →utf-8では、×××  →EUCでは、×××
[この投稿を含むスレッドを表示] [この投稿を削除]
[1192] Re:os
投稿者:つよし
2009/01/03 11:21:55

>・MacOS > →utf-8では正常動作 最近のMacOSXのデフォルトの文字コードは、何なのかわかりません。 10.3.9のデフォルトの文字コードは、EUC-jpですが、ターミナルでUTF-8に設定して 実行するとdiffが差分を出します。 sh test.shの結果 test 1,279c1 < hoge piyo < \nabc < abccde < 0x123..291 < 3 + 5..8 < 3 - 5..-2 < 3 + -5..-2 < 3 * 5..15 < 3 / 5..0 < 10 % 3..1 < 3.0 + 5.0..8.000000 < 3.0 - 5.0..-2.000000 < 3.0 + -5.0..-2.000000 < 3.0 * 5.0..15.000000 < 3.0 / 5.0..0.600000 < 10.0 % 3.0..1.000000 < 3 + 5.0..8.000000 < 3 - 5.0..-2.000000 < 3 + -5.0..-2.000000 < 3 * 5.0..15.000000 < 3 / 5.0..0.600000 < 10 % 3.0..1.000000 < 3.0 + 5..8.000000 < 3.0 - 5..-2.000000 < 3.0 + -5..-2.000000 < 3.0 * 5..15.000000 < 3.0 / 5..0.600000 < 10.0 % 3..1.000000 < 1 & 3..1 < 1 | 2..3 < 1 ^ 3..2 < ~5..-6 < 3 + 5..8 < 3 - 5..-2 < 3 + -5..-2 < 3 * 5..15 < 3 / 5..0 < 10 % 3..1 < 3.0 + 5.0..8.000000 < 3.0 - 5.0..-2.000000 < 3.0 + -5.0..-2.000000 < 3.0 * 5.0..15.000000 < 3.0 / 5.0..0.600000 < 10.0 % 3.0..1.000000 < 3 + 5.0..8.000000 < 3 - 5.0..-2.000000 < 3 + -5.0..-2.000000 < 3 * 5.0..15.000000 < 3 / 5.0..0.600000 < 10 % 3.0..1.000000 < 1 & 3..1 < 1 | 2..3 < 1 ^ 3..2 < ~5..-6 < 3.0 + 5..8.000000 < 3.0 - 5..-2.000000 < 3.0 + -5..-2.000000 < 3.0 * 5..15.000000 < 3.0 / 5..0.600000 < 10.0 % 3..1.000000 < 1 < 3..true < 3 < 1..false < 1 <= 3..true < 3 <= 1..false < 1 == 1..true < 1 == 3..false < 1 != 3..true < 3 != 3..false < 1 >= 3..false < 3 >= 1..true < 3 > 1..true < 1 > 3..false < 1.0 < 3..true < 3 < 1.0..false < 1.0 <= 3..true < 3 <= 1.0..false < 1.0 == 1.0..true < 1.0 == 3..false < 1 != 3.0..true < 3.0 != 3.0..false < 3.0 >= 1..true < 1 >= 3.0..false < 3.0 > 1..true < 1 > 3.0..false < 1 < 3..true < 3 < 1..false < 1 <= 3..true < 3 <= 1..false < 1 == 1..true < 1 == 3..false < 1 != 3..true < 3 != 3..false < 1 >= 3..false < 3 >= 1..true < 3 > 1..true < 1 > 3..false < 1.0 < 3..true < 3 < 1.0..false < 1.0 <= 3..true < 3 <= 1.0..false < 1.0 == 1.0..true < 1.0 == 3..false < 1.0 != 3..true < 3 >= 1.0..true < 1.0 >= 3.0..false < 3 > 1.0..true < 1.0 > 3..false < == good. < != good. < < good. < <= good. < <= good. < >= good. < >= good. < == good. < != good. < < good. < <= good. < <= good. < >= good. < >= good. < int_val..5 < int_val..3 < int_val..9 < int_val..3 < int_val..1 < double_val..5.000000 < double_val..3.000000 < double_val..9.000000 < double_val..3.000000 < double_val..1.000000 < str_val..strhoge3 < int_val..3 < double_val..0.000000 < a..3, b..4.000000 < no_arg < a + b..28 < a + b + c..10.000000 < boolean_func..true < int_func..3 < double_func..3.000000 < string_func..hoge < ********** recursive call ********** < a..10 a..9 a..8 a..7 a..6 a..5 a..4 a..3 a..2 a..1 a..0 < a..0 a..1 a..2 a..3 a..4 a..5 a..6 a..7 a..8 a..9 a..10 < boolean_value..true < !boolean_value..false < true < boolean_value || false < true == true good < true != false good < ! operator good. < true_value == true good < true_value != false good < ! operator good. < true < good < good < good < ********** while statement ********** < i..0 i..1 i..2 i..3 i..4 i..5 i..6 i..7 i..8 i..9 < i..0 i..1 i..2 i..3 i..4 i..5 i..6 < ********** for statement ********** < i..0 i..1 i..2 i..3 i..4 i..5 i..6 < i..0 i..1 i..2 i..3 i..4 i..5 i..6 i..7 i..8 i..9 < ********** break with label in while ********** < i..0, j..0 < i..0, j..1 < i..0, j..2 < i..0, j..3 < i..0, j..4 < i..0, j..5 < ********** break with label in for ********** < i..0, j..0 < i..0, j..1 < i..0, j..2 < i..0, j..3 < i..0, j..4 < i..0, j..5 < ********** continue in while ********** < i..5 i..6 i..7 i..8 i..9 i..10 < i..10 < ********** continue in for ********** < i..5 i..6 i..7 i..8 i..9 < i..10 < ********** continue with label in while ********** < i..1 j..0, i..2 j..0, i..3 j..0, < i..3 j..0 < ********** continue with label in for ********** < i..0 j..0, i..1 j..1, i..2 j..2, < i..3 j..3 < *** i..0*** < i == 0 < i != 3 < i != 2 && i != 3 < *** i..1*** < i == 1 < i != 3 < i != 2 && i != 3 < *** i..2*** < i == 2 < i != 3 < i == 2 || i == 3 < i == 2 && j == 3 < *** i..3*** < i == else < i == 2 || i == 3 < *** i..4*** < i == else < i != 3 < i != 2 && i != 3 < i..11 < ii = 10..10 < array[3][0]..10 < 1 2 3 4 5 6 7 8 9 < 2 4 6 8 10 12 14 16 18 < 3 6 9 12 15 18 21 24 27 < 4 8 12 16 20 24 28 32 36 < 5 10 15 20 25 30 35 40 45 < 6 12 18 24 30 36 42 48 54 < 7 14 21 28 35 42 49 56 63 < 8 16 24 32 40 48 56 64 72 < 9 18 27 36 45 54 63 72 81 < array2[0]..1 < array2[1]..2 < array2[2]..3 < array2[3]..4 < array2[4]..5 < 1 2 3 4 5 6 7 8 9 < 2 4 6 8 10 12 14 16 18 < 3 6 9 12 15 18 21 24 27 < 4 8 12 16 20 24 28 32 36 < 5 10 15 20 25 30 35 40 45 < 6 12 18 24 30 36 42 48 54 < 7 14 21 28 35 42 49 56 63 < 8 16 24 32 40 48 56 64 72 < 9 18 27 36 45 54 63 72 81 < darray[0]..0.000000 < darray[1]..1.000000 < darray[2]..2.000000 < darray[3]..3.000000 < darray[4]..4.000000 < darray[5]..5.000000 < darray[6]..6.000000 < darray[7]..7.000000 < darray[8]..8.000000 < darray[9]..9.000000 < darray[0]..1.000000 < darray[1]..2.000000 < darray[2]..3.000000 < darray[3]..4.000000 < darray[4]..5.000000 < darray[5]..6.000000 < sarray[0]..str0 < sarray[1]..str1 < sarray[2]..str2 < sarray[3]..str3 < sarray[4]..str4 < sarray[5]..str5 < sarray[6]..str6 < sarray[7]..str7 < sarray[8]..str8 < sarray[9]..str9 < sarray[0]..1 < sarray[1]..2 < sarray[2]..3 < sarray[3]..4 < null_str..null < abcnull < null < OK < OK < OK < OK < 日本語 < str[0]..26085 < str[1]..26412 < 本 < str[2]..35486 --- > test.dkm:726:文字リテラルが2文字以上あります。 array 6,7c6,7 < len..6 < substr..eほげほ --- > len..10 > substr..eほ class01 class02 class03 method cast classmain downcast instanceof super exception shapemain throws nullpointer array_ex else_ex test switch final do_while enum delegate rename
[この投稿を含むスレッドを表示] [この投稿を削除]
[1191] Re:os
投稿者:つよし
2009/01/03 10:59:30

>Vine Linuxにて、以下の修正を実施して、../diksam test.dkmで実行して、 >セグメンテーション違反が出るかどうか、よければ試してみてください。 > >(1)test.dkmの720行目以降をコメントアウト(Diksamでは/* */で囲んでコメントアウト) >/* >println("日本語"); > >string str = "日本語"; >for (i = 0; i < str.length(); i++) { > println("str[" + i + "].." + str[i]); > if (str[i] == '本') { > println("本"); > } >} > >exit(1); >println("これは出ない"); >*/ ----上の変更を加えて sh test.sh を実行 $ sh test.sh test 275,279d274 < 日本語 < str[0]..26085 < str[1]..26412 < 本 < str[2]..35486 array class01 class02 class03 method cast classmain downcast instanceof super exception shapemain throws nullpointer array_ex else_ex test switch final do_while enum delegate rename $ > >(2)725~728行目のみをコメントアウト >string str = "日本語"; >for (i = 0; i < str.length(); i++) { > /* > println("str[" + i + "].." + str[i]); > if (str[i] == '本') { > println("本"); > } > */ >} > >exit(1); >println("これは出ない"); > >また、うちのPCでは動かなかった、という方は他にいらっしゃらないでしょうか。 >情報募集中です (_o_) ----上の変更を加えて sh test.sh を実行 $ sh test.sh test 276,279d275 < str[0]..26085 < str[1]..26412 < 本 < str[2]..35486 array class01 class02 class03 method cast classmain downcast instanceof super exception shapemain throws nullpointer array_ex else_ex test switch final do_while enum delegate rename $
[この投稿を含むスレッドを表示] [この投稿を削除]
[1190] Re:os
投稿者:まりーえ
2009/01/02 23:40:43

>また、うちのPCでは動かなかった、という方は他にいらっしゃらないでしょうか。 >情報募集中です (_o_) Debian(etch) にて 上の方にある同じ abort エラーがでました. printf デバッグを行って, <<---------------------------------------- --- diksam_unix.org/share/wchar.c 2008-12-08 08:57:15.000000000 +0900 +++ diksam_unix/share/wchar.c 2009-01-02 23:31:16.000000000 +0900 @@ -1,4 +1,5 @@ #include <stdio.h> +#include <errno.h> #include <string.h> #include <wchar.h> #include "DBG.h" @@ -44,10 +45,12 @@ int status; mbstate_t ps; +printf("[%d] src=%s\n", strlen(src), src); memset(&ps, 0, sizeof(mbstate_t)); for (src_idx = dest_idx = 0; src[src_idx] != '\0'; ) { status = mbrtowc(NULL, &src[src_idx], MULTIBYTE_CHAR_SIZE_MAX, &ps); if (status < 0) { +printf("status. %d. errno=%d: %s\n", status, errno, strerror(errno)); return status; } dest_idx++; >>---------------------------------------- [6] src=日本語 status. -1. errno=84: Invalid or incomplete multibyte or wide character [28] src=不正なマルチバイト文字です。 status. -1. errno=84: Invalid or incomplete multibyte or wide character len=-1 Assertion failure (wc_format != NULL) file..error.c line..92 wc_format is null. Assertion failure (wc_format != NULL) file..error.c line..92 wc_format is null. Abort ------- % printenv LANG ja_JP.EUC-JP % locale -a locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_MESSAGES to default locale: No such file or directory locale: Cannot set LC_COLLATE to default locale: No such file or directory C POSIX ja_JP.utf8 ------- こんな EUC になりきれていない環境です.
[この投稿を含むスレッドを表示] [この投稿を削除]
[1189] Re:os
投稿者:(ぱ)こと管理人
2009/01/02 19:47:50

状況を整理してみます。 ・Linux(Ubuntu 4.1.2-Oubuntu4)←私のところ  →utf-8, EUCともに正常動作 ・Linux(Vine Linux 4.2)  →utf-8では正常動作  →EUCでは、test.dkmにてセグメンテーション違反 その他のスクリプトは、日本語を扱うarray.dkmのようなものを含め、 正常動作。 ・MacOS  →utf-8では正常動作  →EUCでは、以下の現象が発生  ・test.dkmの726行目の'本'という文字リテラルについて、ワイド文字に変換したら   2文字以上と解釈された。  ・array.dkmの46行目の「"hogeほげ".length()」が6を返している。   また、47行目の「"hogeほげほげ".substr(3, 4)」が「eほ&#65533;」を返している。 念のため確認ですが、 ・EUCで動かすときは、「diksam_0_4_02.unix.tgz」をダウンロードして、  これをtar xvzfで展開したフォルダにて、コンパイル、実行をしていますよね?  文字コードの変換等はしていないですよね? ・test.dkmやarray.dkmは、エディタ等で日本語部分を含めちゃんと読めていますよね?  その際、文字コードがEUCであることも、確認できていますよね? MacOSの方はともかくとして、Vine Linuxではarray.dkmの日本語 関連の処理が正常に動いているので、実は文字コード云々は関係 なかった、というオチも考えたのですが、UTF-8版が正常動作して いるなら、やはり何らかの文字コード関係の問題のようです。 うちには今遊んでいるPCはないので、Vineの環境はすぐには作れません。 お手数ですがそちらで以下のテストは可能でしょうか? Vine Linuxにて、以下の修正を実施して、../diksam test.dkmで実行して、 セグメンテーション違反が出るかどうか、よければ試してみてください。 (1)test.dkmの720行目以降をコメントアウト(Diksamでは/* */で囲んでコメントアウト) /* println("日本語"); string str = "日本語"; for (i = 0; i < str.length(); i++) { println("str[" + i + "].." + str[i]); if (str[i] == '本') { println("本"); } } exit(1); println("これは出ない"); */ (2)725~728行目のみをコメントアウト string str = "日本語"; for (i = 0; i < str.length(); i++) { /* println("str[" + i + "].." + str[i]); if (str[i] == '本') { println("本"); } */ } exit(1); println("これは出ない"); また、うちのPCでは動かなかった、という方は他にいらっしゃらないでしょうか。 情報募集中です (_o_)
[この投稿を含むスレッドを表示] [この投稿を削除]
[1188] os
投稿者:つよし
2009/01/02 05:58:45

前橋さん vine linux 4.2 な環境では、再現できませんか? 遊んでいるパソコンあれば環境作れそうですが、むり??
[この投稿を含むスレッドを表示] [この投稿を削除]
[1187] 試行
投稿者:つよし
2009/01/02 05:53:15

>main/main.cの26行目あたりに >setlocale(LC_CTYPE, ""); >という行があるはずですが、これを、 >setlocale(LC_ALL, "ja_JP.EUC-JP"); >に変更し、再コンパイルするとどうなるでしょうか? エラーが出ます。 ------------------vine: sh test.sh test.sh: line 1: 2490 セグメンテーション違反です ../diksam test.dkm >test_.result 2>&1 test 1,279d0 < hoge piyo < \nabc < abccde < 0x123..291 < 3 + 5..8 < 3 - 5..-2 < 3 + -5..-2 < 3 * 5..15 < 3 / 5..0 < 10 % 3..1 < 3.0 + 5.0..8.000000 < 3.0 - 5.0..-2.000000 < 3.0 + -5.0..-2.000000 < 3.0 * 5.0..15.000000 < 3.0 / 5.0..0.600000 < 10.0 % 3.0..1.000000 < 3 + 5.0..8.000000 < 3 - 5.0..-2.000000 < 3 + -5.0..-2.000000 < 3 * 5.0..15.000000 < 3 / 5.0..0.600000 < 10 % 3.0..1.000000 < 3.0 + 5..8.000000 < 3.0 - 5..-2.000000 < 3.0 + -5..-2.000000 < 3.0 * 5..15.000000 < 3.0 / 5..0.600000 < 10.0 % 3..1.000000 < 1 & 3..1 < 1 | 2..3 < 1 ^ 3..2 < ~5..-6 < 3 + 5..8 < 3 - 5..-2 < 3 + -5..-2 < 3 * 5..15 < 3 / 5..0 < 10 % 3..1 < 3.0 + 5.0..8.000000 < 3.0 - 5.0..-2.000000 < 3.0 + -5.0..-2.000000 < 3.0 * 5.0..15.000000 < 3.0 / 5.0..0.600000 < 10.0 % 3.0..1.000000 < 3 + 5.0..8.000000 < 3 - 5.0..-2.000000 < 3 + -5.0..-2.000000 < 3 * 5.0..15.000000 < 3 / 5.0..0.600000 < 10 % 3.0..1.000000 < 1 & 3..1 < 1 | 2..3 < 1 ^ 3..2 < ~5..-6 < 3.0 + 5..8.000000 < 3.0 - 5..-2.000000 < 3.0 + -5..-2.000000 < 3.0 * 5..15.000000 < 3.0 / 5..0.600000 < 10.0 % 3..1.000000 < 1 < 3..true < 3 < 1..false < 1 <= 3..true < 3 <= 1..false < 1 == 1..true < 1 == 3..false < 1 != 3..true < 3 != 3..false < 1 >= 3..false < 3 >= 1..true < 3 > 1..true < 1 > 3..false < 1.0 < 3..true < 3 < 1.0..false < 1.0 <= 3..true < 3 <= 1.0..false < 1.0 == 1.0..true < 1.0 == 3..false < 1 != 3.0..true < 3.0 != 3.0..false < 3.0 >= 1..true < 1 >= 3.0..false < 3.0 > 1..true < 1 > 3.0..false < 1 < 3..true < 3 < 1..false < 1 <= 3..true < 3 <= 1..false < 1 == 1..true < 1 == 3..false < 1 != 3..true < 3 != 3..false < 1 >= 3..false < 3 >= 1..true < 3 > 1..true < 1 > 3..false < 1.0 < 3..true < 3 < 1.0..false < 1.0 <= 3..true < 3 <= 1.0..false < 1.0 == 1.0..true < 1.0 == 3..false < 1.0 != 3..true < 3 >= 1.0..true < 1.0 >= 3.0..false < 3 > 1.0..true < 1.0 > 3..false < == good. < != good. < < good. < <= good. < <= good. < >= good. < >= good. < == good. < != good. < < good. < <= good. < <= good. < >= good. < >= good. < int_val..5 < int_val..3 < int_val..9 < int_val..3 < int_val..1 < double_val..5.000000 < double_val..3.000000 < double_val..9.000000 < double_val..3.000000 < double_val..1.000000 < str_val..strhoge3 < int_val..3 < double_val..0.000000 < a..3, b..4.000000 < no_arg < a + b..28 < a + b + c..10.000000 < boolean_func..true < int_func..3 < double_func..3.000000 < string_func..hoge < ********** recursive call ********** < a..10 a..9 a..8 a..7 a..6 a..5 a..4 a..3 a..2 a..1 a..0 < a..0 a..1 a..2 a..3 a..4 a..5 a..6 a..7 a..8 a..9 a..10 < boolean_value..true < !boolean_value..false < true < boolean_value || false < true == true good < true != false good < ! operator good. < true_value == true good < true_value != false good < ! operator good. < true < good < good < good < ********** while statement ********** < i..0 i..1 i..2 i..3 i..4 i..5 i..6 i..7 i..8 i..9 < i..0 i..1 i..2 i..3 i..4 i..5 i..6 < ********** for statement ********** < i..0 i..1 i..2 i..3 i..4 i..5 i..6 < i..0 i..1 i..2 i..3 i..4 i..5 i..6 i..7 i..8 i..9 < ********** break with label in while ********** < i..0, j..0 < i..0, j..1 < i..0, j..2 < i..0, j..3 < i..0, j..4 < i..0, j..5 < ********** break with label in for ********** < i..0, j..0 < i..0, j..1 < i..0, j..2 < i..0, j..3 < i..0, j..4 < i..0, j..5 < ********** continue in while ********** < i..5 i..6 i..7 i..8 i..9 i..10 < i..10 < ********** continue in for ********** < i..5 i..6 i..7 i..8 i..9 < i..10 < ********** continue with label in while ********** < i..1 j..0, i..2 j..0, i..3 j..0, < i..3 j..0 < ********** continue with label in for ********** < i..0 j..0, i..1 j..1, i..2 j..2, < i..3 j..3 < *** i..0*** < i == 0 < i != 3 < i != 2 && i != 3 < *** i..1*** < i == 1 < i != 3 < i != 2 && i != 3 < *** i..2*** < i == 2 < i != 3 < i == 2 || i == 3 < i == 2 && j == 3 < *** i..3*** < i == else < i == 2 || i == 3 < *** i..4*** < i == else < i != 3 < i != 2 && i != 3 < i..11 < ii = 10..10 < array[3][0]..10 < 1 2 3 4 5 6 7 8 9 < 2 4 6 8 10 12 14 16 18 < 3 6 9 12 15 18 21 24 27 < 4 8 12 16 20 24 28 32 36 < 5 10 15 20 25 30 35 40 45 < 6 12 18 24 30 36 42 48 54 < 7 14 21 28 35 42 49 56 63 < 8 16 24 32 40 48 56 64 72 < 9 18 27 36 45 54 63 72 81 < array2[0]..1 < array2[1]..2 < array2[2]..3 < array2[3]..4 < array2[4]..5 < 1 2 3 4 5 6 7 8 9 < 2 4 6 8 10 12 14 16 18 < 3 6 9 12 15 18 21 24 27 < 4 8 12 16 20 24 28 32 36 < 5 10 15 20 25 30 35 40 45 < 6 12 18 24 30 36 42 48 54 < 7 14 21 28 35 42 49 56 63 < 8 16 24 32 40 48 56 64 72 < 9 18 27 36 45 54 63 72 81 < darray[0]..0.000000 < darray[1]..1.000000 < darray[2]..2.000000 < darray[3]..3.000000 < darray[4]..4.000000 < darray[5]..5.000000 < darray[6]..6.000000 < darray[7]..7.000000 < darray[8]..8.000000 < darray[9]..9.000000 < darray[0]..1.000000 < darray[1]..2.000000 < darray[2]..3.000000 < darray[3]..4.000000 < darray[4]..5.000000 < darray[5]..6.000000 < sarray[0]..str0 < sarray[1]..str1 < sarray[2]..str2 < sarray[3]..str3 < sarray[4]..str4 < sarray[5]..str5 < sarray[6]..str6 < sarray[7]..str7 < sarray[8]..str8 < sarray[9]..str9 < sarray[0]..1 < sarray[1]..2 < sarray[2]..3 < sarray[3]..4 < null_str..null < abcnull < null < OK < OK < OK < OK < 日本語 < str[0]..26085 < str[1]..26412 < 本 < str[2]..35486 array class01 class02 class03 method cast classmain downcast instanceof super exception shapemain throws nullpointer array_ex else_ex test switch final do_while enum delegate rename ------------------vine: sh test.sh ------------------macosx: sh test.sh test 1,279c1 < hoge piyo < \nabc < abccde < 0x123..291 < 3 + 5..8 < 3 - 5..-2 < 3 + -5..-2 < 3 * 5..15 < 3 / 5..0 < 10 % 3..1 < 3.0 + 5.0..8.000000 < 3.0 - 5.0..-2.000000 < 3.0 + -5.0..-2.000000 < 3.0 * 5.0..15.000000 < 3.0 / 5.0..0.600000 < 10.0 % 3.0..1.000000 < 3 + 5.0..8.000000 < 3 - 5.0..-2.000000 < 3 + -5.0..-2.000000 < 3 * 5.0..15.000000 < 3 / 5.0..0.600000 < 10 % 3.0..1.000000 < 3.0 + 5..8.000000 < 3.0 - 5..-2.000000 < 3.0 + -5..-2.000000 < 3.0 * 5..15.000000 < 3.0 / 5..0.600000 < 10.0 % 3..1.000000 < 1 & 3..1 < 1 | 2..3 < 1 ^ 3..2 < ~5..-6 < 3 + 5..8 < 3 - 5..-2 < 3 + -5..-2 < 3 * 5..15 < 3 / 5..0 < 10 % 3..1 < 3.0 + 5.0..8.000000 < 3.0 - 5.0..-2.000000 < 3.0 + -5.0..-2.000000 < 3.0 * 5.0..15.000000 < 3.0 / 5.0..0.600000 < 10.0 % 3.0..1.000000 < 3 + 5.0..8.000000 < 3 - 5.0..-2.000000 < 3 + -5.0..-2.000000 < 3 * 5.0..15.000000 < 3 / 5.0..0.600000 < 10 % 3.0..1.000000 < 1 & 3..1 < 1 | 2..3 < 1 ^ 3..2 < ~5..-6 < 3.0 + 5..8.000000 < 3.0 - 5..-2.000000 < 3.0 + -5..-2.000000 < 3.0 * 5..15.000000 < 3.0 / 5..0.600000 < 10.0 % 3..1.000000 < 1 < 3..true < 3 < 1..false < 1 <= 3..true < 3 <= 1..false < 1 == 1..true < 1 == 3..false < 1 != 3..true < 3 != 3..false < 1 >= 3..false < 3 >= 1..true < 3 > 1..true < 1 > 3..false < 1.0 < 3..true < 3 < 1.0..false < 1.0 <= 3..true < 3 <= 1.0..false < 1.0 == 1.0..true < 1.0 == 3..false < 1 != 3.0..true < 3.0 != 3.0..false < 3.0 >= 1..true < 1 >= 3.0..false < 3.0 > 1..true < 1 > 3.0..false < 1 < 3..true < 3 < 1..false < 1 <= 3..true < 3 <= 1..false < 1 == 1..true < 1 == 3..false < 1 != 3..true < 3 != 3..false < 1 >= 3..false < 3 >= 1..true < 3 > 1..true < 1 > 3..false < 1.0 < 3..true < 3 < 1.0..false < 1.0 <= 3..true < 3 <= 1.0..false < 1.0 == 1.0..true < 1.0 == 3..false < 1.0 != 3..true < 3 >= 1.0..true < 1.0 >= 3.0..false < 3 > 1.0..true < 1.0 > 3..false < == good. < != good. < < good. < <= good. < <= good. < >= good. < >= good. < == good. < != good. < < good. < <= good. < <= good. < >= good. < >= good. < int_val..5 < int_val..3 < int_val..9 < int_val..3 < int_val..1 < double_val..5.000000 < double_val..3.000000 < double_val..9.000000 < double_val..3.000000 < double_val..1.000000 < str_val..strhoge3 < int_val..3 < double_val..0.000000 < a..3, b..4.000000 < no_arg < a + b..28 < a + b + c..10.000000 < boolean_func..true < int_func..3 < double_func..3.000000 < string_func..hoge < ********** recursive call ********** < a..10 a..9 a..8 a..7 a..6 a..5 a..4 a..3 a..2 a..1 a..0 < a..0 a..1 a..2 a..3 a..4 a..5 a..6 a..7 a..8 a..9 a..10 < boolean_value..true < !boolean_value..false < true < boolean_value || false < true == true good < true != false good < ! operator good. < true_value == true good < true_value != false good < ! operator good. < true < good < good < good < ********** while statement ********** < i..0 i..1 i..2 i..3 i..4 i..5 i..6 i..7 i..8 i..9 < i..0 i..1 i..2 i..3 i..4 i..5 i..6 < ********** for statement ********** < i..0 i..1 i..2 i..3 i..4 i..5 i..6 < i..0 i..1 i..2 i..3 i..4 i..5 i..6 i..7 i..8 i..9 < ********** break with label in while ********** < i..0, j..0 < i..0, j..1 < i..0, j..2 < i..0, j..3 < i..0, j..4 < i..0, j..5 < ********** break with label in for ********** < i..0, j..0 < i..0, j..1 < i..0, j..2 < i..0, j..3 < i..0, j..4 < i..0, j..5 < ********** continue in while ********** < i..5 i..6 i..7 i..8 i..9 i..10 < i..10 < ********** continue in for ********** < i..5 i..6 i..7 i..8 i..9 < i..10 < ********** continue with label in while ********** < i..1 j..0, i..2 j..0, i..3 j..0, < i..3 j..0 < ********** continue with label in for ********** < i..0 j..0, i..1 j..1, i..2 j..2, < i..3 j..3 < *** i..0*** < i == 0 < i != 3 < i != 2 && i != 3 < *** i..1*** < i == 1 < i != 3 < i != 2 && i != 3 < *** i..2*** < i == 2 < i != 3 < i == 2 || i == 3 < i == 2 && j == 3 < *** i..3*** < i == else < i == 2 || i == 3 < *** i..4*** < i == else < i != 3 < i != 2 && i != 3 < i..11 < ii = 10..10 < array[3][0]..10 < 1 2 3 4 5 6 7 8 9 < 2 4 6 8 10 12 14 16 18 < 3 6 9 12 15 18 21 24 27 < 4 8 12 16 20 24 28 32 36 < 5 10 15 20 25 30 35 40 45 < 6 12 18 24 30 36 42 48 54 < 7 14 21 28 35 42 49 56 63 < 8 16 24 32 40 48 56 64 72 < 9 18 27 36 45 54 63 72 81 < array2[0]..1 < array2[1]..2 < array2[2]..3 < array2[3]..4 < array2[4]..5 < 1 2 3 4 5 6 7 8 9 < 2 4 6 8 10 12 14 16 18 < 3 6 9 12 15 18 21 24 27 < 4 8 12 16 20 24 28 32 36 < 5 10 15 20 25 30 35 40 45 < 6 12 18 24 30 36 42 48 54 < 7 14 21 28 35 42 49 56 63 < 8 16 24 32 40 48 56 64 72 < 9 18 27 36 45 54 63 72 81 < darray[0]..0.000000 < darray[1]..1.000000 < darray[2]..2.000000 < darray[3]..3.000000 < darray[4]..4.000000 < darray[5]..5.000000 < darray[6]..6.000000 < darray[7]..7.000000 < darray[8]..8.000000 < darray[9]..9.000000 < darray[0]..1.000000 < darray[1]..2.000000 < darray[2]..3.000000 < darray[3]..4.000000 < darray[4]..5.000000 < darray[5]..6.000000 < sarray[0]..str0 < sarray[1]..str1 < sarray[2]..str2 < sarray[3]..str3 < sarray[4]..str4 < sarray[5]..str5 < sarray[6]..str6 < sarray[7]..str7 < sarray[8]..str8 < sarray[9]..str9 < sarray[0]..1 < sarray[1]..2 < sarray[2]..3 < sarray[3]..4 < null_str..null < abcnull < null < OK < OK < OK < OK < 日本語 < str[0]..26085 < str[1]..26412 < 本 < str[2]..35486 --- > test.dkm:726:文字リテラルが2文字以上あります。 array 6,7c6,7 < len..6 < substr..eほげほ --- > len..8 > substr..eほ&#65533; class01 class02 class03 method cast classmain downcast instanceof super exception shapemain throws nullpointer array_ex else_ex test switch final do_while enum delegate rename ------------------macosx: sh test.sh
[この投稿を含むスレッドを表示] [この投稿を削除]
[1186] Re:UTFをEUCへ:実行 Vine
投稿者:(ぱ)こと管理人
2009/01/02 02:42:57

情報ありがとうございます。 >Vine4.2 (EUC-jpな環境)において >(1) EUC-jp->tar zxvf->--------------コンパイル->sh test.sh->の結果 と >(2) UTF-8-->tar zxvf->EUC-jpへ変換->コンパイル->sh test.sh->の結果 は 現在の、EUC/UTF-8の配布パッケージは、プログラムは同じで単に文字コードが 違うだけですから、これが同じ結果になるのはわかります。 しかし、当方では、つよしさんのところと同じ現象は今のところ再現しません。 main/main.cの26行目あたりに setlocale(LC_CTYPE, ""); という行があるはずですが、これを、 setlocale(LC_ALL, "ja_JP.EUC-JP"); に変更し、再コンパイルするとどうなるでしょうか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[1185] Re:UTFをEUCへ:実行 Vine
投稿者:つよし
2009/01/01 20:50:27

試したことを書きます。 Vine4.2 (EUC-jpな環境)において (1) EUC-jp->tar zxvf->--------------コンパイル->sh test.sh->の結果 と (2) UTF-8-->tar zxvf->EUC-jpへ変換->コンパイル->sh test.sh->の結果 は 1行目のエラーメッセージだけ、一部違いました。 < test.sh: line 1: 17811 セグメンテーション違反です ../diksam test.dkm >test_.result 2>&1 --- > test.sh: line 1: 17754 セグメンテーション違反です ../diksam test.dkm >test_.result 2>&1
[この投稿を含むスレッドを表示] [この投稿を削除]
[1184] UTFをEUCへ:実行 Mac
投稿者:つよし
2009/01/01 20:36:55

前橋さん 試したことを書きます。 MacOSX10.3.9(EUC-jpな環境)において (1) EUC-jp->tar zxvf->--------------コンパイル->sh test.sh->の結果 と (2) UTF-8-->tar zxvf->EUC-jpへ変換->コンパイル->sh test.sh->の結果 は   100% 一致しました。 文字コードは、すべて EUC-jp で実行?しました。 diksam うまくコンパイルできていないのか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[1183] Re:EUC環境 Mac Vine
投稿者:(ぱ)こと管理人
2009/01/01 17:51:37

>vine4.2 >test.sh: line 1: 3405 セグメンテーション違反です ../diksam test.dkm こちらは単に死んでしまっているので、ちょっとわからないですが、 >MacOSX10.3.9 >> test.dkm:726:文字リテラルが2文字以上あります。 >array >6,7c6,7 >< len..6 >< substr..eほげほ >--- >> len..8 >> substr..eほ&#65533; こちらを見ると、 ・test.dkmの726行目の'本'という文字リテラルについて、ワイド文字に変換したら  2文字以上と解釈された。 ・array.dkmの46行目の「"hogeほげ".length()」が6を返している。  また、47行目の「"hogeほげほげ".substr(3, 4)」が「eほ&#65533;」を返している。 ということがわかります。マルチバイト文字列の変換に関する問題のようです。 確認ですが、test.dkmやarray.dkmの文字コードは何になっていますか? EUCモードで実行する際は、.dkmファイルもEUCでなければなりません。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1182] EUC環境 Mac Vine
投稿者:つよし
2009/01/01 16:23:16

EUCな環境 MacOSX10.3.9 と vine4.2 での $ sh test.sh の結果です。 長いです。 -------------------------------------- vine4.2 test.sh: line 1: 3405 セグメンテーション違反です ../diksam test.dkm >test_.result 2>&1 test 1,279d0 < hoge piyo < \nabc < abccde < 0x123..291 < 3 + 5..8 < 3 - 5..-2 < 3 + -5..-2 < 3 * 5..15 < 3 / 5..0 < 10 % 3..1 < 3.0 + 5.0..8.000000 < 3.0 - 5.0..-2.000000 < 3.0 + -5.0..-2.000000 < 3.0 * 5.0..15.000000 < 3.0 / 5.0..0.600000 < 10.0 % 3.0..1.000000 < 3 + 5.0..8.000000 < 3 - 5.0..-2.000000 < 3 + -5.0..-2.000000 < 3 * 5.0..15.000000 < 3 / 5.0..0.600000 < 10 % 3.0..1.000000 < 3.0 + 5..8.000000 < 3.0 - 5..-2.000000 < 3.0 + -5..-2.000000 < 3.0 * 5..15.000000 < 3.0 / 5..0.600000 < 10.0 % 3..1.000000 < 1 & 3..1 < 1 | 2..3 < 1 ^ 3..2 < ~5..-6 < 3 + 5..8 < 3 - 5..-2 < 3 + -5..-2 < 3 * 5..15 < 3 / 5..0 < 10 % 3..1 < 3.0 + 5.0..8.000000 < 3.0 - 5.0..-2.000000 < 3.0 + -5.0..-2.000000 < 3.0 * 5.0..15.000000 < 3.0 / 5.0..0.600000 < 10.0 % 3.0..1.000000 < 3 + 5.0..8.000000 < 3 - 5.0..-2.000000 < 3 + -5.0..-2.000000 < 3 * 5.0..15.000000 < 3 / 5.0..0.600000 < 10 % 3.0..1.000000 < 1 & 3..1 < 1 | 2..3 < 1 ^ 3..2 < ~5..-6 < 3.0 + 5..8.000000 < 3.0 - 5..-2.000000 < 3.0 + -5..-2.000000 < 3.0 * 5..15.000000 < 3.0 / 5..0.600000 < 10.0 % 3..1.000000 < 1 < 3..true < 3 < 1..false < 1 <= 3..true < 3 <= 1..false < 1 == 1..true < 1 == 3..false < 1 != 3..true < 3 != 3..false < 1 >= 3..false < 3 >= 1..true < 3 > 1..true < 1 > 3..false < 1.0 < 3..true < 3 < 1.0..false < 1.0 <= 3..true < 3 <= 1.0..false < 1.0 == 1.0..true < 1.0 == 3..false < 1 != 3.0..true < 3.0 != 3.0..false < 3.0 >= 1..true < 1 >= 3.0..false < 3.0 > 1..true < 1 > 3.0..false < 1 < 3..true < 3 < 1..false < 1 <= 3..true < 3 <= 1..false < 1 == 1..true < 1 == 3..false < 1 != 3..true < 3 != 3..false < 1 >= 3..false < 3 >= 1..true < 3 > 1..true < 1 > 3..false < 1.0 < 3..true < 3 < 1.0..false < 1.0 <= 3..true < 3 <= 1.0..false < 1.0 == 1.0..true < 1.0 == 3..false < 1.0 != 3..true < 3 >= 1.0..true < 1.0 >= 3.0..false < 3 > 1.0..true < 1.0 > 3..false < == good. < != good. < < good. < <= good. < <= good. < >= good. < >= good. < == good. < != good. < < good. < <= good. < <= good. < >= good. < >= good. < int_val..5 < int_val..3 < int_val..9 < int_val..3 < int_val..1 < double_val..5.000000 < double_val..3.000000 < double_val..9.000000 < double_val..3.000000 < double_val..1.000000 < str_val..strhoge3 < int_val..3 < double_val..0.000000 < a..3, b..4.000000 < no_arg < a + b..28 < a + b + c..10.000000 < boolean_func..true < int_func..3 < double_func..3.000000 < string_func..hoge < ********** recursive call ********** < a..10 a..9 a..8 a..7 a..6 a..5 a..4 a..3 a..2 a..1 a..0 < a..0 a..1 a..2 a..3 a..4 a..5 a..6 a..7 a..8 a..9 a..10 < boolean_value..true < !boolean_value..false < true < boolean_value || false < true == true good < true != false good < ! operator good. < true_value == true good < true_value != false good < ! operator good. < true < good < good < good < ********** while statement ********** < i..0 i..1 i..2 i..3 i..4 i..5 i..6 i..7 i..8 i..9 < i..0 i..1 i..2 i..3 i..4 i..5 i..6 < ********** for statement ********** < i..0 i..1 i..2 i..3 i..4 i..5 i..6 < i..0 i..1 i..2 i..3 i..4 i..5 i..6 i..7 i..8 i..9 < ********** break with label in while ********** < i..0, j..0 < i..0, j..1 < i..0, j..2 < i..0, j..3 < i..0, j..4 < i..0, j..5 < ********** break with label in for ********** < i..0, j..0 < i..0, j..1 < i..0, j..2 < i..0, j..3 < i..0, j..4 < i..0, j..5 < ********** continue in while ********** < i..5 i..6 i..7 i..8 i..9 i..10 < i..10 < ********** continue in for ********** < i..5 i..6 i..7 i..8 i..9 < i..10 < ********** continue with label in while ********** < i..1 j..0, i..2 j..0, i..3 j..0, < i..3 j..0 < ********** continue with label in for ********** < i..0 j..0, i..1 j..1, i..2 j..2, < i..3 j..3 < *** i..0*** < i == 0 < i != 3 < i != 2 && i != 3 < *** i..1*** < i == 1 < i != 3 < i != 2 && i != 3 < *** i..2*** < i == 2 < i != 3 < i == 2 || i == 3 < i == 2 && j == 3 < *** i..3*** < i == else < i == 2 || i == 3 < *** i..4*** < i == else < i != 3 < i != 2 && i != 3 < i..11 < ii = 10..10 < array[3][0]..10 < 1 2 3 4 5 6 7 8 9 < 2 4 6 8 10 12 14 16 18 < 3 6 9 12 15 18 21 24 27 < 4 8 12 16 20 24 28 32 36 < 5 10 15 20 25 30 35 40 45 < 6 12 18 24 30 36 42 48 54 < 7 14 21 28 35 42 49 56 63 < 8 16 24 32 40 48 56 64 72 < 9 18 27 36 45 54 63 72 81 < array2[0]..1 < array2[1]..2 < array2[2]..3 < array2[3]..4 < array2[4]..5 < 1 2 3 4 5 6 7 8 9 < 2 4 6 8 10 12 14 16 18 < 3 6 9 12 15 18 21 24 27 < 4 8 12 16 20 24 28 32 36 < 5 10 15 20 25 30 35 40 45 < 6 12 18 24 30 36 42 48 54 < 7 14 21 28 35 42 49 56 63 < 8 16 24 32 40 48 56 64 72 < 9 18 27 36 45 54 63 72 81 < darray[0]..0.000000 < darray[1]..1.000000 < darray[2]..2.000000 < darray[3]..3.000000 < darray[4]..4.000000 < darray[5]..5.000000 < darray[6]..6.000000 < darray[7]..7.000000 < darray[8]..8.000000 < darray[9]..9.000000 < darray[0]..1.000000 < darray[1]..2.000000 < darray[2]..3.000000 < darray[3]..4.000000 < darray[4]..5.000000 < darray[5]..6.000000 < sarray[0]..str0 < sarray[1]..str1 < sarray[2]..str2 < sarray[3]..str3 < sarray[4]..str4 < sarray[5]..str5 < sarray[6]..str6 < sarray[7]..str7 < sarray[8]..str8 < sarray[9]..str9 < sarray[0]..1 < sarray[1]..2 < sarray[2]..3 < sarray[3]..4 < null_str..null < abcnull < null < OK < OK < OK < OK < 日本語 < str[0]..26085 < str[1]..26412 < 本 < str[2]..35486 array class01 class02 class03 method cast classmain downcast instanceof super exception shapemain throws nullpointer array_ex else_ex test switch final do_while enum delegate rename -------------------------------------- MacOSX10.3.9 test 1,279c1 < hoge piyo < \nabc < abccde < 0x123..291 < 3 + 5..8 < 3 - 5..-2 < 3 + -5..-2 < 3 * 5..15 < 3 / 5..0 < 10 % 3..1 < 3.0 + 5.0..8.000000 < 3.0 - 5.0..-2.000000 < 3.0 + -5.0..-2.000000 < 3.0 * 5.0..15.000000 < 3.0 / 5.0..0.600000 < 10.0 % 3.0..1.000000 < 3 + 5.0..8.000000 < 3 - 5.0..-2.000000 < 3 + -5.0..-2.000000 < 3 * 5.0..15.000000 < 3 / 5.0..0.600000 < 10 % 3.0..1.000000 < 3.0 + 5..8.000000 < 3.0 - 5..-2.000000 < 3.0 + -5..-2.000000 < 3.0 * 5..15.000000 < 3.0 / 5..0.600000 < 10.0 % 3..1.000000 < 1 & 3..1 < 1 | 2..3 < 1 ^ 3..2 < ~5..-6 < 3 + 5..8 < 3 - 5..-2 < 3 + -5..-2 < 3 * 5..15 < 3 / 5..0 < 10 % 3..1 < 3.0 + 5.0..8.000000 < 3.0 - 5.0..-2.000000 < 3.0 + -5.0..-2.000000 < 3.0 * 5.0..15.000000 < 3.0 / 5.0..0.600000 < 10.0 % 3.0..1.000000 < 3 + 5.0..8.000000 < 3 - 5.0..-2.000000 < 3 + -5.0..-2.000000 < 3 * 5.0..15.000000 < 3 / 5.0..0.600000 < 10 % 3.0..1.000000 < 1 & 3..1 < 1 | 2..3 < 1 ^ 3..2 < ~5..-6 < 3.0 + 5..8.000000 < 3.0 - 5..-2.000000 < 3.0 + -5..-2.000000 < 3.0 * 5..15.000000 < 3.0 / 5..0.600000 < 10.0 % 3..1.000000 < 1 < 3..true < 3 < 1..false < 1 <= 3..true < 3 <= 1..false < 1 == 1..true < 1 == 3..false < 1 != 3..true < 3 != 3..false < 1 >= 3..false < 3 >= 1..true < 3 > 1..true < 1 > 3..false < 1.0 < 3..true < 3 < 1.0..false < 1.0 <= 3..true < 3 <= 1.0..false < 1.0 == 1.0..true < 1.0 == 3..false < 1 != 3.0..true < 3.0 != 3.0..false < 3.0 >= 1..true < 1 >= 3.0..false < 3.0 > 1..true < 1 > 3.0..false < 1 < 3..true < 3 < 1..false < 1 <= 3..true < 3 <= 1..false < 1 == 1..true < 1 == 3..false < 1 != 3..true < 3 != 3..false < 1 >= 3..false < 3 >= 1..true < 3 > 1..true < 1 > 3..false < 1.0 < 3..true < 3 < 1.0..false < 1.0 <= 3..true < 3 <= 1.0..false < 1.0 == 1.0..true < 1.0 == 3..false < 1.0 != 3..true < 3 >= 1.0..true < 1.0 >= 3.0..false < 3 > 1.0..true < 1.0 > 3..false < == good. < != good. < < good. < <= good. < <= good. < >= good. < >= good. < == good. < != good. < < good. < <= good. < <= good. < >= good. < >= good. < int_val..5 < int_val..3 < int_val..9 < int_val..3 < int_val..1 < double_val..5.000000 < double_val..3.000000 < double_val..9.000000 < double_val..3.000000 < double_val..1.000000 < str_val..strhoge3 < int_val..3 < double_val..0.000000 < a..3, b..4.000000 < no_arg < a + b..28 < a + b + c..10.000000 < boolean_func..true < int_func..3 < double_func..3.000000 < string_func..hoge < ********** recursive call ********** < a..10 a..9 a..8 a..7 a..6 a..5 a..4 a..3 a..2 a..1 a..0 < a..0 a..1 a..2 a..3 a..4 a..5 a..6 a..7 a..8 a..9 a..10 < boolean_value..true < !boolean_value..false < true < boolean_value || false < true == true good < true != false good < ! operator good. < true_value == true good < true_value != false good < ! operator good. < true < good < good < good < ********** while statement ********** < i..0 i..1 i..2 i..3 i..4 i..5 i..6 i..7 i..8 i..9 < i..0 i..1 i..2 i..3 i..4 i..5 i..6 < ********** for statement ********** < i..0 i..1 i..2 i..3 i..4 i..5 i..6 < i..0 i..1 i..2 i..3 i..4 i..5 i..6 i..7 i..8 i..9 < ********** break with label in while ********** < i..0, j..0 < i..0, j..1 < i..0, j..2 < i..0, j..3 < i..0, j..4 < i..0, j..5 < ********** break with label in for ********** < i..0, j..0 < i..0, j..1 < i..0, j..2 < i..0, j..3 < i..0, j..4 < i..0, j..5 < ********** continue in while ********** < i..5 i..6 i..7 i..8 i..9 i..10 < i..10 < ********** continue in for ********** < i..5 i..6 i..7 i..8 i..9 < i..10 < ********** continue with label in while ********** < i..1 j..0, i..2 j..0, i..3 j..0, < i..3 j..0 < ********** continue with label in for ********** < i..0 j..0, i..1 j..1, i..2 j..2, < i..3 j..3 < *** i..0*** < i == 0 < i != 3 < i != 2 && i != 3 < *** i..1*** < i == 1 < i != 3 < i != 2 && i != 3 < *** i..2*** < i == 2 < i != 3 < i == 2 || i == 3 < i == 2 && j == 3 < *** i..3*** < i == else < i == 2 || i == 3 < *** i..4*** < i == else < i != 3 < i != 2 && i != 3 < i..11 < ii = 10..10 < array[3][0]..10 < 1 2 3 4 5 6 7 8 9 < 2 4 6 8 10 12 14 16 18 < 3 6 9 12 15 18 21 24 27 < 4 8 12 16 20 24 28 32 36 < 5 10 15 20 25 30 35 40 45 < 6 12 18 24 30 36 42 48 54 < 7 14 21 28 35 42 49 56 63 < 8 16 24 32 40 48 56 64 72 < 9 18 27 36 45 54 63 72 81 < array2[0]..1 < array2[1]..2 < array2[2]..3 < array2[3]..4 < array2[4]..5 < 1 2 3 4 5 6 7 8 9 < 2 4 6 8 10 12 14 16 18 < 3 6 9 12 15 18 21 24 27 < 4 8 12 16 20 24 28 32 36 < 5 10 15 20 25 30 35 40 45 < 6 12 18 24 30 36 42 48 54 < 7 14 21 28 35 42 49 56 63 < 8 16 24 32 40 48 56 64 72 < 9 18 27 36 45 54 63 72 81 < darray[0]..0.000000 < darray[1]..1.000000 < darray[2]..2.000000 < darray[3]..3.000000 < darray[4]..4.000000 < darray[5]..5.000000 < darray[6]..6.000000 < darray[7]..7.000000 < darray[8]..8.000000 < darray[9]..9.000000 < darray[0]..1.000000 < darray[1]..2.000000 < darray[2]..3.000000 < darray[3]..4.000000 < darray[4]..5.000000 < darray[5]..6.000000 < sarray[0]..str0 < sarray[1]..str1 < sarray[2]..str2 < sarray[3]..str3 < sarray[4]..str4 < sarray[5]..str5 < sarray[6]..str6 < sarray[7]..str7 < sarray[8]..str8 < sarray[9]..str9 < sarray[0]..1 < sarray[1]..2 < sarray[2]..3 < sarray[3]..4 < null_str..null < abcnull < null < OK < OK < OK < OK < 日本語 < str[0]..26085 < str[1]..26412 < 本 < str[2]..35486 --- > test.dkm:726:文字リテラルが2文字以上あります。 array 6,7c6,7 < len..6 < substr..eほげほ --- > len..8 > substr..eほ&#65533; class01 class02 class03 method cast classmain downcast instanceof super exception shapemain throws nullpointer array_ex else_ex test switch final do_while enum delegate rename --------------------------------------
[この投稿を含むスレッドを表示] [この投稿を削除]
[1181] Re:あけましておめでとうございます!
投稿者:(ぱ)こと管理人
2009/01/01 13:08:26

>EUC な環境をにわかに準備して test.sh を実行しました。 ... >diff が差分を吐き出します。 まず、[1178]につよしさんが貼ってくださった実行結果は、正常に動いています。 UTF-8版は正しく動いたが、EUC版は正しく動かなかった、ということでしょうか? うちではUTF-8版もEUC版も、test.shは流して正常動作を確認しています。 つよしさんのところで動かなかったのだとしたら、そのdiffが吐いた差分を 貼っていただかないと何がおきているのかわからないです。さすがに。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1180] あけましておめでとうございます
投稿者:(ぱ)こと管理人
2009/01/01 13:04:37

あけましておめでとうございます。 今年もよろしくお願いいたします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1179] あけましておめでとうございます!
投稿者:つよし
2009/01/01 00:53:29

前橋さん 2009年 平成21年 1月 1日 元日 さっそく仕事始めです=嘘です。 EUC な環境をにわかに準備して test.sh を実行しました。 実は、 このパソコンは、メモリテストでエラーが出ますがVine4.2をインストールできました。 なぜかエラーは出ません。見かけはだいじょうぶ? このようなパソコンで test.sh を実行するのは、正常な精神ではありませんが、、笑い。 diff が差分を吐き出します。 前橋さん 追試をお願いします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1178] Re:Linuxコンパイルエラー
投稿者:つよし
2008/12/31 23:14:34

前橋さん 今年もあとわずか!!来年も発展を願います!! アップ試しました。 気持ちよく実行できました。 ありがとうございます。 $ sh test.sh test array class01 class02 class03 method cast classmain downcast instanceof super exception shapemain throws nullpointer array_ex else_ex test switch final do_while enum delegate rename $ ># いまどきEUCは時代錯誤か…… 確かに。 > 個人的には、EUCな環境の方を使っていた時間が長いですが!!
[この投稿を含むスレッドを表示] [この投稿を削除]