VIPPERでもわかるC言語 Part2
■ このスレッドは過去ログ倉庫に格納されています
0001ぬるぽ
2005/11/05(土) 20:20:34天ぷらは>>2あたり
0232デフォルトの名無しさん
2005/11/06(日) 01:56:39ポインタ配列
0233デフォルトの名無しさん
2005/11/06(日) 01:57:14代入?
0234デフォルトの名無しさん
2005/11/06(日) 01:57:28いや、これはポインタの代入だからいいのだ
0235デフォルトの名無しさん
2005/11/06(日) 01:57:32C単体ではグラフィックの機能がないって意味だとオモタ
Cは描画する機能を呼び出す役割ってことか
0236デフォルトの名無しさん
2005/11/06(日) 01:58:05うはw見落としてた
ポインタ配列だったか・・・
0237デフォルトの名無しさん
2005/11/06(日) 01:58:39*test->vipper[0]と*(test->vipper[0])は同じ。アロー演算子の方が優先順位が高いから。
ちなみにポインタ演算子を抜かすとメンバへのアクセスがおかしくなるはず
勘違いとかだったらごめんね、俺も初心者だから
0238デフォルトの名無しさん
2005/11/06(日) 01:59:03おいおい、testもvipper[0]もポインタだぜ?
そこに"ヒャッホウ!!"のアドレスを渡すんだから、
test->vipper[0] = "ヒャッホウ!!";
ってなるだろ?
0239デフォルトの名無しさん
2005/11/06(日) 02:00:09ポインタから直接メンバ変数へのAccessVBA
0240デフォルトの名無しさん
2005/11/06(日) 02:01:06それでもだめだろwwwwwww
0241デフォルトの名無しさん
2005/11/06(日) 02:01:180242デフォルトの名無しさん
2005/11/06(日) 02:02:08だよな?
0243デフォルトの名無しさん
2005/11/06(日) 02:03:09あーそっか。
str *vipper = "test";
こんな形ばかり見てたから、
str *vipper;
*vipper = "test";
これで正しいと勘違いしてましたorz
0244デフォルトの名無しさん
2005/11/06(日) 02:03:180245デフォルトの名無しさん
2005/11/06(日) 02:03:42TEST test2;
test = &test2;
とおなじで、
test->vipper[0] これは char*
よろしいか?
0246デフォルトの名無しさん
2005/11/06(日) 02:04:160247デフォルトの名無しさん
2005/11/06(日) 02:05:09str *vipper = "サイタマサイタマ";
ああ、宣言と初期値の代入を一緒に書く方法な。
0248デフォルトの名無しさん
2005/11/06(日) 02:05:380249デフォルトの名無しさん
2005/11/06(日) 02:06:360250デフォルトの名無しさん
2005/11/06(日) 02:06:42そうだね、そうだねorz
C#もやってるから狂ってるよ
0251デフォルトの名無しさん
2005/11/06(日) 02:06:51#typedef str char;
0252デフォルトの名無しさん
2005/11/06(日) 02:08:450253デフォルトの名無しさん
2005/11/06(日) 02:09:380254デフォルトの名無しさん
2005/11/06(日) 02:10:200255デフォルトの名無しさん
2005/11/06(日) 02:10:420256デフォルトの名無しさん
2005/11/06(日) 02:11:190257デフォルトの名無しさん
2005/11/06(日) 02:11:25俺と一緒にFlash職人目指そうぜ!
0258デフォルトの名無しさん
2005/11/06(日) 02:11:35どうせやるなら、
typedef char* str;
の方がいいと思う
>>253
#defineは止めとけ
0259デフォルトの名無しさん
2005/11/06(日) 02:13:20よし、なんでも聞いてくれ!
0260デフォルトの名無しさん
2005/11/06(日) 02:14:05>>255
0261デフォルトの名無しさん
2005/11/06(日) 02:16:03これはシロウトにはお勧めしない。
0262デフォルトの名無しさん
2005/11/06(日) 02:16:59アドレスを代入してるんであって、文字列そのものをコピーしてるんじゃないってとこがポイントだな。
あばよ!
0263デフォルトの名無しさん
2005/11/06(日) 02:20:36OK、把握した。
0264デフォルトの名無しさん
2005/11/06(日) 02:23:32OK、把握した。
0265デフォルトの名無しさん
2005/11/06(日) 02:25:07これはOK?
0266デフォルトの名無しさん
2005/11/06(日) 02:26:58取り出し方間違わなければ良いんじゃね?
0267デフォルトの名無しさん
2005/11/06(日) 02:27:06だめ
char* str[] = {"str1", "str2", "str3"};
0268デフォルトの名無しさん
2005/11/06(日) 02:27:31#define VIPPER int main(){while(1)puts("m9(^Д^)プギャ-");}
VIPPER
0269デフォルトの名無しさん
2005/11/06(日) 02:29:53#include <stdio.h>
#define VIPPER int main(){while(1)puts("m9(^Д^)プギャ-");return 0;}
VIPPER
0270デフォルトの名無しさん
2005/11/06(日) 02:30:310271デフォルトの名無しさん
2005/11/06(日) 02:31:100272デフォルトの名無しさん
2005/11/06(日) 02:31:57char *tinpoppo[]={" (*‘ω‘*)ちんぽっぽ!"," ( *’ω’*)"};
でFA?
0273デフォルトの名無しさん
2005/11/06(日) 02:33:10おk
0274デフォルトの名無しさん
2005/11/06(日) 02:38:59こうですか?わかりません><
…本気でわかんね
0275デフォルトの名無しさん
2005/11/06(日) 02:57:43{"test","test","test"}};
これでいけた。
ちなみにchar *test[][]じゃむりなのな。
test[3]を宣言された個数だけ確保する、って感じか。勉強になったわ
0276デフォルトの名無しさん
2005/11/06(日) 03:33:49☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(\・∀・)< まとめ更新まだー?
\_/⊂ ⊂_)_ \_______
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
|  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| :|
| .|/
0277デフォルトの名無しさん
2005/11/06(日) 03:34:55そろそろ寝るお
0278デフォルトの名無しさん
2005/11/06(日) 03:56:500279デフォルトの名無しさん
2005/11/06(日) 04:13:15たとえばRPG作るとしてセーブデータをどうやって処理するかとかやり方わかる?
0280デフォルトの名無しさん
2005/11/06(日) 04:25:56まずどういう形式でセーブするかを考えて決める
たとえば最初にキャラクタ名が10文字、次に年齢が4文字、とか
それをふまえてセーブする時はファイルを開いてそこへ
コンソールに出力するのと同じみたいにして書き出してく
ロードする時はそのセーブしてあるはずのファイルを開いて
コンソールからの入力と同様の感じで読み出す
それをあらかじめ決めてあるデータ形式にそって解読
チート対策とかはまあそのうち考えれ
0281デフォルトの名無しさん
2005/11/06(日) 04:37:39必要なデータをそこに格納
fwriteで構造体ごとファイルに書き出して終了。
読み込むときもfreadで構造体丸ごと読み込む。
俺はこのあたりのやり方が簡単だと思うが、どうだろう?
0282デフォルトの名無しさん
2005/11/06(日) 04:42:180283デフォルトの名無しさん
2005/11/06(日) 04:46:46結構たいへんな構造体になりそうだね
cgiの掲示板とかはどうだろう
名前と本文と書き込み時間とメアドと・・・とかの区切りをどうやってやるべきだろう
RPGと違ってcgiのユーザは何するかわからないから変なデータをそのまま書き込むと
ファイルが読み込めなくなったりなんかしそう
0284デフォルトの名無しさん
2005/11/06(日) 04:55:16変じゃないデータだけが書きこまれるようにするのが吉かと思う
2ちゃんのdatは「<>」で区切っているね
俺が掲示板を作った時は「4個の改行」を区切りにしてみた
0285デフォルトの名無しさん
2005/11/06(日) 07:32:290286デフォルトの名無しさん
2005/11/06(日) 07:58:240287デフォルトの名無しさん
2005/11/06(日) 08:27:110288デフォルトの名無しさん
2005/11/06(日) 08:29:330289デフォルトの名無しさん
2005/11/06(日) 08:30:32普通はjavascriptで不適切な入力のチェックをする。
CGIでチェックするのはお勧めできない。
0290デフォルトの名無しさん
2005/11/06(日) 09:26:00#define ADD(a, b) (a+b)
int a = 10, b = 20, c;
とやって、
c = ADD(a, b); と c = a+b; はかかる時間は同じってことでおけ?
0291デフォルトの名無しさん
2005/11/06(日) 10:04:47どこかにぴろゆきとか隠し文字を入れないと駄目だって
>>286がいってます。
0292デフォルトの名無しさん
2005/11/06(日) 10:15:220293デフォルトの名無しさん
2005/11/06(日) 10:23:29どうもありがとん♪
マクロ不使用の時の方が速いような気がして、どうしようかと思ってたのよ。
これで安心して次に行けるわぁ。
>>291
( ゚Д゚) それデフォですか!?
0294デフォルトの名無しさん
2005/11/06(日) 10:37:37OP動画:http://up50.hp.infoseek.co.jp/cgi-bin/upload/src/up0005.wmv
OPフラッシュ:http://ozv.hp.infoseek.co.jp/cgi-bin/upload/src/up0011.swf
0295デフォルトの名無しさん
2005/11/06(日) 11:33:18フラグ、キャラデータ…ごとにmd5して、復元したそれぞれのデータのmd5値と一致するか調べるとかどうかなぁ。
0296デフォルトの名無しさん
2005/11/06(日) 11:39:11#define VIPQUALITY malloc(1)
int main(void) {
while(1) {
VIPQUALITY; //(^ω^)
}
return 0;
}
0297デフォルトの名無しさん
2005/11/06(日) 11:40:39直すのマンドクセwwwwwwwwww
0298デフォルトの名無しさん
2005/11/06(日) 11:49:030299デフォルトの名無しさん
2005/11/06(日) 11:52:12free(str);ってやるとエラーでるし、よくわからん
#include <stdio.h>
int main()
{
char *str;
str="hello";
str="again";
printf("%s\n", str);
return 0;
}
0300デフォルトの名無しさん
2005/11/06(日) 12:04:51文字列リテラルは、メモリ中のどこかに自動的に配置されるから
解放する必要はないの
0301デフォルトの名無しさん
2005/11/06(日) 12:07:360302デフォルトの名無しさん
2005/11/06(日) 12:07:49free()はmalloc()と対になるもので、動的に割り当てられたメモリを開放する。
文字列リテラルは最初からメモリに配置されてるもの(静的な割り当て)だから、
プロセスの開放時に同時に開放されるの。
0303デフォルトの名無しさん
2005/11/06(日) 12:11:19メモリ中のどこかには違いないんだけど、
システムの都合上、書き込み不可な場所の場合もあるから、
文字列リテラルを指してるポインタは書きかえちゃだめだよ。
ex.
char* str;
str = "hello".
strcpy( str, "string" ); // メモリ保護違反
>>301
OK.
0304デフォルトの名無しさん
2005/11/06(日) 12:11:34VC++とかでデバッグできる環境なら、プロセスメモリを覗くウィンドウがあるから、
それでアドレス指定して、どういう割り当て方されてるのか見てみるのも良いかも
0305デフォルトの名無しさん
2005/11/06(日) 12:15:10正確には違うかもしれんがconst char*のようなもの
0306デフォルトの名無しさん
2005/11/06(日) 12:16:05意味ナッシング
0307デフォルトの名無しさん
2005/11/06(日) 13:07:58>>>283
>普通はjavascriptで不適切な入力のチェックをする。
>CGIでチェックするのはお勧めできない。
激しく遅レスだが、これは間違い
Javascriptでのチェックはバイパスされる可能性があるので、CGI側のチェックは必須
この基本を忘れて、パスワード抜かれたりするサイトが続発してる
0308286
2005/11/06(日) 13:58:590309デフォルトの名無しさん
2005/11/06(日) 14:05:52アナリスク最高!
0310デフォルトの名無しさん
2005/11/06(日) 14:17:120311デフォルトの名無しさん
2005/11/06(日) 14:18:58〒 ! + イヤッッホォォォオオォオウ!
+ 。 | |
* + / / 我等が偉大なる勇者達に幸運を。 *
∧_∧ / / .+ 儚くも散っていった者達に冥福を。 +
(´∀` / /. .純愛スナイパー、鬼畜スナイパーには栄誉を。
,- f
/ ュヘ. | * .
〈_} ) |
/ ! +
./ ,ヘ |
ガタン ||| j / | | ||| それがVIPクオリティ!
0312デフォルトの名無しさん
2005/11/06(日) 14:39:18#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//#define READONLY
typedef struct CHARA
{
int hp;
int mp;
char name[9];
} CHARA;
unsigned char MDVip(char *data, int size)
{
int i;
int hash=0;
for (i=0 ; i<size ; i++)
{
hash+=data[i];
}
return hash%255;
}
int main()
{
const char *filename="savedata.dat";
FILE *fp;
CHARA yusya, mosyasu;
unsigned char yusya_hash, mosyasu_file_hash, mosyasu_hash;
0313デフォルトの名無しさん
2005/11/06(日) 14:39:52yusya.hp=100;
yusya.mp=128;
strcpy(yusya.name, "もょもと");
//保存
#ifndef READONLY
yusya_hash=MDVip(&yusya, sizeof(yusya));
fp=fopen(filename, "w");
fwrite(&yusya, sizeof(yusya), 1, fp);
fwrite(&yusya_hash, sizeof(yusya_hash), 1, fp);
fclose(fp);
#endif
//読み込み
fp=fopen(filename, "r");
fread(&mosyasu, sizeof(mosyasu), 1, fp);
fread(&mosyasu_file_hash, sizeof(mosyasu_file_hash), 1, fp);
fclose(fp);
mosyasu_hash=MDVip(&mosyasu, sizeof(mosyasu));
if (mosyasu_file_hash == mosyasu_hash)
{
printf("ファイルが改ざんされてない事を確認しました\n");
}
else
{
printf("ファイルが改ざんされています\n");
0314デフォルトの名無しさん
2005/11/06(日) 14:40:30printf("%d\n", mosyasu.hp);
printf("%d\n", mosyasu.mp);
printf("%s\n", mosyasu.name);
#ifndef READONLY
printf("%d\n", yusya_hash);
#endif
printf("%d\n", mosyasu_hash);
printf("%d\n", mosyasu_file_hash);
}
//おわり
0315デフォルトの名無しさん
2005/11/06(日) 14:47:04乙
よく見てないけど、構造体はアライメント入っちゃうから#pragma pack(1)するといいお
ファイルのバイナリアクセスする場合はwbとrbにするといいお
あとmain()の戻り値忘れてるお
じゃあな
0316デフォルトの名無しさん
2005/11/06(日) 14:57:230317デフォルトの名無しさん
2005/11/06(日) 15:00:50C成り難し
0318デフォルトの名無しさん
2005/11/06(日) 15:16:130319デフォルトの名無しさん
2005/11/06(日) 15:21:070320デフォルトの名無しさん
2005/11/06(日) 15:32:360321デフォルトの名無しさん
2005/11/06(日) 15:36:01あとMDVip関数について詳しく。
0322デフォルトの名無しさん
2005/11/06(日) 15:36:32このsageない基地外なんか過去から全部同じ椰子じゃないかとまで思ってしまう。
(ネタがつまらんのが致命的にキモイ)
0323デフォルトの名無しさん
2005/11/06(日) 15:38:150324デフォルトの名無しさん
2005/11/06(日) 15:38:210325デフォルトの名無しさん
2005/11/06(日) 15:53:400326デフォルトの名無しさん
2005/11/06(日) 16:14:24亀だけど、それはJavaScript切ってる奴とかもいるからまずいだろ
切ってると素通しになるっていうのもまずいし、切ってるとはじかれる
っていうのも不便でまずい
あとJavaScriptは手元で改造されてるかもしれないしな
0327デフォルトの名無しさん
2005/11/06(日) 16:20:26312じゃないが、勝手に解説
MDvipは、読み込んだデータを1バイト単位で足していって、合計を255で割った余りを取る関数。
もしも、データが改ざんされている場合、この計算結果が一致しなくなるから、改ざんを判断できる。
つまり、MDvip関数の戻り値が同じになるように改ざんされた場合は、改ざんを検出できない。
例)128,44,66,223という4バイトのデータを書き込む場合(全て10進数で説明)
128+44+66+223=461
461%255=206
保存するときは、4バイトのデータとともに、この206も保存する。
そして、読み込む際に、読み込んだデータから再計算する。
もしも、128、150、66、223のようにデータが改ざんされていたとすれば、
128+150+66+223=567
567%255=57
で、計算結果が一致しなくなる
248,164,81,223のような改ざんの場合
(248+164+81+223)%255=206
なので、こういったデータの改ざんの場合は検出できない
間違ってたら突っ込みよろしく
0328デフォルトの名無しさん
2005/11/06(日) 16:35:23なるほど〜、一つ一つのデータを暗号化するわけではなく、
全体の和を255で割った剰余を別に保存する訳ね。
おっけ、把握しました。
0329デフォルトの名無しさん
2005/11/06(日) 16:54:59ログインできなくてちんぽっぽ
0330デフォルトの名無しさん
2005/11/06(日) 17:21:12まとめサイトはいまから更新するお
0331デフォルトの名無しさん
2005/11/06(日) 17:23:15■ このスレッドは過去ログ倉庫に格納されています