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