プチコン3号 SmileBASIC コミュニティプレイ日記ぴくと kanau12032015/10/28 20:34:38一画面プログラム楽しい! (プロフ用 多分…)5そうだね 10返信プレイ済み2017/11/03 15:22:40に取得
プチコン3号 SmileBASIC コミュニティ返信[1]親投稿MIKI ifconfig2015/10/28 21:35ローカル変数に char usage[] = "..."; と書くと、コピーが入るので遅くなるので、こういう場合は char *usage=".."とします。 一般にargcは1以上です。従ってこのプログラムは常に 9行目を実行する。 usageで省略可能なオプションは [] でくくるのが普通。 23行目sprintf(3)、argv[1] が 300バイトよりも大きい時バッファオーバフローの脆弱性があります。3そうだね プレイ済み2017/11/03 15:22:40に取得
プチコン3号 SmileBASIC コミュニティ返信[2]親投稿ぴくと kanau12032015/10/28 22:51まさかBASICのコミュで指摘されるとは思ってませんでした 笑 コマンドライン引数については、 まだ勉強中で全然理解してなくて…0そうだね プレイ済み2017/11/03 15:22:40に取得
プチコン3号 SmileBASIC コミュニティ返信[3]親投稿MIKI ifconfig2015/10/28 22:55#include <stdio.h> int main(int argc, char *argv[]) { int i; for (i = 0; i < argc; i++) printf("argv[%d]=[%s]\n", argv[i]); return 0 } ↑こんな myecho.c とか作って、 $ ./myecho a b "c d" 'e"f"g' とかいろいろ実行してみてください。 2そうだね プレイ済み2017/11/03 15:22:40に取得
プチコン3号 SmileBASIC コミュニティ返信[4]親投稿ぴくと kanau12032015/10/28 23:10なんとなくイメージ掴めました! このようなコマンドでファイルを操作するようなソフト以外にも使い道あるのかな…0そうだね プレイ済み2017/11/03 15:22:40に取得
プチコン3号 SmileBASIC コミュニティ返信[5]親投稿MIKI ifconfig2015/10/28 23:18プチコンでプログラムを書くに先立って、 アルゴリズムの検証のため c で書くということをよくやってます。 コーディング、実行、デバッグのループが、プチコンでやる場合に比べると桁違いに効率がいいので。 スプライトやグラフィック関係のコードは書けないので、テキストアプリか、純粋にアルゴリズム部分だけなんだけど。 pcで動くプチコン互換の処理系があればいいんだけどね~~~1そうだね プレイ済み2017/11/03 15:22:40に取得
プチコン3号 SmileBASIC コミュニティ返信[6]親投稿ぴくと kanau12032015/10/28 23:45頭良い人はそうするんですか! ◇/('ω'`)メモメモ アルゴリズムって大切だったのかぁー…0そうだね プレイ済み2017/11/03 15:22:40に取得
プチコン3号 SmileBASIC コミュニティ返信[7]親投稿Godot orz_1272015/10/29 12:19みき★さんのコメントに「バッファオーバーフローの脆弱性があります」と。その後、具体的には触れていないので、それくらい自分で調べて対応するようにとの厳しいご指導なのかもしれませんが、参考にされている情報が入門的な場合、そこまで記述がないかも。なので、ヒント的なものを。 バッファオーバー的な対策として、文字列操作系の関数には、_s つきの関数が追加されています。 sprintf()だと、sprintf_s()と言う関数が対応します。 現在は、_s付きの関数を使用する事が推奨されています。 おまけ、argv[0]には、実行したコマンド自体が入っているのでこの様にも。 void usage(char *cmd) { sprintf(STDERR,"usage: %s [-d] <filename>\n", cmd); } main(){ … usage(argv[0]); … } 1そうだね プレイ済み2017/11/03 15:22:40に取得
プチコン3号 SmileBASIC コミュニティ返信[8]親投稿Godot orz_1272015/10/29 12:29すみません 間違えましたw おまけの方はsprintf()ではなく、fprintf()です。 直前でsprintf()の話しをしていたのでつられました^^; Usageは、一応エラーかな?と思ったので標準エラー(STDERR)にメッセージを出力しています。 printf()は、標準出力(STDOUT)にメッセージを出力します。 fprintf(STDOUT,…);と同じになります。 これも_sつき有ります。1そうだね プレイ済み2017/11/03 15:22:40に取得
プチコン3号 SmileBASIC コミュニティ返信[9]親投稿MIKI ifconfig2015/10/29 20:34stderr を大文字で書くのは perl 系ですね。 0そうだね プレイ済み2017/11/03 15:22:40に取得
プチコン3号 SmileBASIC コミュニティ返信[10]親投稿Godot orz_1272015/10/30 12:18確認しました。 C言語では、小文字 stderr でした^^; 大文字のSTDERRは、Perl、Ruby、PHPの類いの様です。 ちょっと言語が入り混じってました^^;1そうだね プレイ済み2017/11/03 15:22:40に取得