HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2006
0607
I386変数エラー7解決


I386

リンク

2006/6/7(Wed) 13:23:57|NO.1007


#module #deffunc test val buf,str key,int size if size < 0 : size=strlen(buf) if size > strlen(buf) : size=strlen(buf) kc=0 repeat strlen (key) k(cnt)=peek(key,cnt) loop return #global

とモジュール化して実行すると、
変数名が指定されていませんエラーがでます。
間違っているところでもあるのでしょうか。
ちなみに3.0使用です。



この記事に返信する


ゆーちゃん

リンク

2006/6/7(Wed) 14:19:41|NO.1008

命令実行の部分が書いてないのでわかりませんが、
パラメーターの型を間違えてませんか?
それから、sizeという変数(ですよね?)の後に@を
つけないと、モジュールの外の変数は使えません。
文字数を調べたいのだと思いますが、条件分岐の部分が
ちょっとわかりません。sizeが「0<size<strlen(buf)」という
条件って全てに当てはまると思うんですが…?
repeat〜loop内も、よく見直して下さい。



I386

リンク

2006/6/7(Wed) 15:12:16|NO.1009

このモジュールはまだ未完成で、文字列変数bufを文字列keyで
数値size分だけ暗号化するものなのですが、
ここでやりたいのはkeyを1byteごとに配列に入れたいのです。
(sizeの条件分岐はsizeが異常な値の時に対処させるものです。)

上のスクリプトでvarがvalになってましたが、直しても同じです。
またエラー発生行は k(cnt)=peek(key,cnt) のところか、
sizeの条件分岐が真となった時にその行(多分size=starlen(buf))
で止まってしまいます。
ためしにモジュール内でsizeに何か値を入れてみるとそれだけでエラーとなるようです。



Irisawa

リンク

2006/6/7(Wed) 15:18:43|NO.1010

sizeがintで宣言されています。
変数として処理する際にはvarにしてください。
intはconst(定数)です。


#module #deffunc test var buf, str key, var size if size < 0 : size = strlen(buf) if size > strlen(buf) : size = strlen(buf) kc = 0 repeat strlen(key) k(cnt) = peek(key, cnt) loop return #global



ゆーちゃん

リンク

2006/6/7(Wed) 15:50:17|NO.1011

すみません、先ほど書き込みましたが、勘違いしてました。ぱっと見て書いたんで。
しかも、文章が酷く高圧的なような…。そんなつもりなかったですよ。

すでに解決済みかもしれませんが、いろいろ試した結果、
何故かこの方法でエラーが解決したので書いておきます。

☆if文が2行ありますが、二行目のsizeの部分を変える
if size < 0 : size=strlen(buf)
if x > strlen(buf) : x=strlen(buf) //この行改変

☆k(cnt)=peek(key,cnt)の部分のcntを変える(代入させる)
     repeat strlen (key)
a=key          //この行書き足し
     k(cnt)=peek(a,cnt)    //この行改変
     loop

とりあえず、これでエラーが出ることはありませんでした。
これだと、思い通りの結果が得られるか怪しいかもしれません。



Irisawa

リンク

2006/6/7(Wed) 16:45:39|NO.1013

すみません、まだ間違えていました。
keyもstrで宣言されています。
こちらも定数なのでpeekなどは使用できません。


#module #deffunc test var buf, var key, var size, local k if size < 0 : size = strlen(buf) if size > strlen(buf) : size = strlen(buf) repeat strlen(key) k(cnt) = peek(key, cnt) loop return #global



osakana

リンク

2006/6/8(Thu) 03:16:52|NO.1023


#module #deffunc test val buf,str key,int size key2=key size2=size if size < 0 : size2=strlen(buf) if size > strlen(buf) : size2=strlen(buf) kc=0 repeat strlen (key) k(cnt)=peek(key2,cnt) loop return k #global
変数型以外の仮引数には代入出来ないので、
一旦変数に代入してから使うのが手っ取り早いですよ。



I386

リンク

2006/6/8(Thu) 12:41:41|NO.1025

皆さん色々とありがとうございます。
osakanaさんの方法で見事解決しました。
2.61時代のmrefに慣れていたので新しくエイリアス機能が追加されて少々戸惑っていました。
エイリアス機能で指定されたint,str型は代入できないんですね。
mrefではできていたので…。



ONION software Copyright 1997-2023(c) All rights reserved.