C言語なら俺に聞け! Part 126
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/04/23(日) 22:32:08質問する前には最低限検索を。
GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は専門の別スレッドがあるのでそこへさようなら。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
前スレ
C言語なら俺に聞け! Part 125
http://pc8.2ch.net/test/read.cgi/tech/1143900407/
0002デフォルトの名無しさん
2006/04/23(日) 22:36:150003デフォルトの名無しさん
2006/04/23(日) 23:09:30人生の先輩の皆さんはどのエディタ使ってますか?
弟にOSをリカバリされたのでちょうどいい機会なので他のエディタを使ってみたいです。
0004デフォルトの名無しさん
2006/04/23(日) 23:15:080005デフォルトの名無しさん
2006/04/23(日) 23:27:140006デフォルトの名無しさん
2006/04/23(日) 23:28:050007デフォルトの名無しさん
2006/04/23(日) 23:37:590008デフォルトの名無しさん
2006/04/24(月) 00:39:050009デフォルトの名無しさん
2006/04/24(月) 01:29:540010デフォルトの名無しさん
2006/04/24(月) 07:25:220011デフォルトの名無しさん
2006/04/24(月) 13:36:57xyzzy
桜エディタ
Peggy
0012デフォルトの名無しさん
2006/04/24(月) 15:58:190013デフォルトの名無しさん
2006/04/24(月) 18:15:38俺もだ。SQL もバッチも、テキストというテキストはすべて。
ターゲットが Windows 以外のときも、makefile 手で書いて
カスタムビルドで nmake 走らせる。そこまでするほど VS。
で、たまに「ああもう!」と叫びながら vim 起動。
0014デフォルトの名無しさん
2006/04/24(月) 18:37:34nmakeってそんなにいいのか?
0015デフォルトの名無しさん
2006/04/24(月) 19:35:38vim
いつも Linux ばかり使っているもので、つい。
0016デフォルトの名無しさん
2006/04/24(月) 20:01:11ここはVSを買えない貧乏人が集うスレ
0017デフォルトの名無しさん
2006/04/24(月) 20:08:270018デフォルトの名無しさん
2006/04/24(月) 20:21:340019デフォルトの名無しさん
2006/04/24(月) 20:31:570020デフォルトの名無しさん
2006/04/24(月) 21:22:11のんびり基礎やってるうちに次期バージョン移れるぞ
0021デフォルトの名無しさん
2006/04/24(月) 22:11:1110 20 30 40 50 60 70 80 90
という連続したバイナリデータをファイルから読込んで
fooに2byteの1020h
foooに3byteの304050h
fooooには4byteの5060708090h
巧くいきません、出力の仕方(printf文)も曖昧なのですが、
それぞれ変数の先頭アドレスにfoo10hfooo20hfoooo30hと巧くいっていないのが
分かります(;^ω^)
fooに2byteの1020h
foooに3byteの304050h
fooooには4byteの5060708090h
と代入する方法を教えてくださいお願いします。
#include <stdio.h>
#include <dirent.h>
char foo[1];
char fooo[2];
char foooo[3];
int main(void){
FILE *fp;
if ((fp = fopen("hoge.exe", "rb")) == NULL) {
printf("file open error!!\n");
exit(1);/* エラーの場合は通常、異常終了する */
fclose(fp);/* ファイルのクローズ */
}
fread(&foo, sizeof(foo[1]), 1, fp);
fread(&fooo, sizeof(fooo[2]), 1, fp);
fread(&foooo, sizeof(foooo[3]), 1, fp);
printf("fooは:%xです\n", *foo);
printf("foooは:%xです\n", *fooo);
printf("fooooは:%xです\n", *foooo);
}
0022デフォルトの名無しさん
2006/04/24(月) 22:13:14sizeof(foo[1])をsizeof fooに、foooとfooooも同じように。
0023デフォルトの名無しさん
2006/04/24(月) 22:14:06002421
2006/04/24(月) 22:15:43fooに2byteの1020h
foooに3byteの304050h
fooooには4byteの5060708090h
を代入する方法を教えてください。
002521
2006/04/24(月) 22:42:13どうもありがとうございます、配列の順番が揃ったみたいです
>>23さん
どうもです、馬鹿ミスでした
printf("fooは:%xです\n", *foo);
printf("foooは:%xです\n", *fooo);
printf("fooooは:%xです\n", *foooo);
としてみると
fooは:10です\n", *foo);
foooは:30です
fooooは:60です
となりましたが、変数fooに1020、foooに304050、fooooに60708090
とするには、どうしたらいいのでしょうか?
0026デフォルトの名無しさん
2006/04/24(月) 22:50:22printf("foooは:%x%xです\n", fooo[0], fooo[1]);
0027デフォルトの名無しさん
2006/04/24(月) 23:20:36http://www.vb-c.net/
002821
2006/04/25(火) 00:44:20どうもです、確かにそれで表示ができますね(;^ω^)
とこが実はこのプログラムの目的なのですが、バイナリデータをあるコードに
変換することが目的なのです、ある種のコンパイラの様なものと
理解して頂けたら幸いです、しかし、ここで問題が発生しました
foo[0]が00でfoo[1]が01の場合はhoge
foo[0]が01foo[1]が00の場合はhoghoge
を返すような関数を作りたいのですが、こんな場合
どのようなアルゴリズムを考えるべきなのでしょうか?
%x%xの書式で表すと0001も0100も同じ01と同じ結果になってしまう気がしますし・・・
バイナリデータをどのように扱っていいか思案しています、
皆様のお知恵拝借お願いします
0029デフォルトの名無しさん
2006/04/25(火) 01:26:480030デフォルトの名無しさん
2006/04/25(火) 01:56:03中でmallocした変数って返していいんだっけ?
char *a = (char *)malloc(sizeof(char) * 255);
return a;
こいつを返していいんだっけ?関数ないで作成した自動変数ってそのスコープだけじゃなかったっけ?
どうなんだっけ?
0031デフォルトの名無しさん
2006/04/25(火) 02:06:260032デフォルトの名無しさん
2006/04/25(火) 02:10:20>foo[0]が00でfoo[1]が01の場合はhoge
>foo[0]が01foo[1]が00の場合はhoghoge
foo[0]*256+foo[1]
0033デフォルトの名無しさん
2006/04/25(火) 02:12:21char *b = hoge(....);
ってやったらfree(b)すればいいんだね。ありがとう
0034デフォルトの名無しさん
2006/04/25(火) 08:59:30君、プログラム辞めた方がいいよ。
0035デフォルトの名無しさん
2006/04/25(火) 13:18:49これってバッファオーバーフローしていますか?
0036デフォルトの名無しさん
2006/04/25(火) 13:23:08マジレスで使い方次第
0037デフォルトの名無しさん
2006/04/25(火) 13:23:160038デフォルトの名無しさん
2006/04/25(火) 13:30:20(((;゚Д゚)))
有難うございました。
0039デフォルトの名無しさん
2006/04/25(火) 13:41:14なんでコンパイラに文字配列の大きさを計算させないのかを問いつめたい
0040デフォルトの名無しさん
2006/04/25(火) 13:45:510041デフォルトの名無しさん
2006/04/25(火) 15:43:01char buff[5] = "aiueo";は
char buff[5] = { 'a', 'i', 'u', 'e', 'o' };と同義
char buff[] = "aiueo";は
char buff[] = { 'a', 'i', 'u', 'e', 'o', '\0' };と同義
0042デフォルトの名無しさん
2006/04/25(火) 16:22:29間違ってねーか?
0043デフォルトの名無しさん
2006/04/25(火) 18:42:59:
:
:
:
}HOGE,*PHOGE;
って
typedef struct{
:
:
:
:
}HOGE;
typedef HOGE * PHOGE;
と同じ意味ですよね?
0044デフォルトの名無しさん
2006/04/25(火) 19:02:100045デフォルトの名無しさん
2006/04/25(火) 19:10:39ありがとうございました。
メインの方で、文字列を受け取るにはどうしたらよいのでしょうか?
どなたか、よろしくお願いします。
0047デフォルトの名無しさん
2006/04/25(火) 19:49:26return で返せるのは、
・呼び出し元のスコープに所属するchar配列のどこかを指すポインタ
・mallocで確保した領域へのポインタ
・static領域(グローバル変数を含む)に確保されている配列のどこかを指すポインタ
のいずれか。
受け側は単純に char *p = f(); でいい。
文字列を保持したいなら、別途配列やmallocした領域にstrcpyする。
0048デフォルトの名無しさん
2006/04/25(火) 19:56:08・呼び出し側確保型
strcpy(), strftime()など。strcpy()は確保された量を呼び出し側で保証する必要がある。
strftime()は確保された量も関数に渡すことで関数側でも制限ができる。
・静的領域型
ctime()など。このタイプは呼び出しごとに内部静的領域が破壊されるため、呼び出し側で
速やかに引き取る必要がある。また、この点からマルチスレッドに向かない。
・動的確保型
strdup()(非標準)など。このタイプは呼び出し側で解放することが必要になる。
しばしばそれは忘れられてメモリリークの原因になる。
0049デフォルトの名無しさん
2006/04/25(火) 20:23:580050デフォルトの名無しさん
2006/04/25(火) 20:24:58てか、C言語の場合は struct を省略出来ないと思ったが、あ、もしやC99で変わった?
0051デフォルトの名無しさん
2006/04/25(火) 20:34:090052デフォルトの名無しさん
2006/04/25(火) 20:48:27例:分→時、 分 変換
分?75
1時間15分
この問題のソースをおしえてください。
0053デフォルトの名無しさん
2006/04/25(火) 20:53:04ヒント: 60 で割った値と 60 で割った余りの値を使う。
まあ、あとは宿題スレで聞け。
0054デフォルトの名無しさん
2006/04/25(火) 21:19:59何の為の typedef かと小一時間・・・
0055デフォルトの名無しさん
2006/04/25(火) 21:24:02main()
{
int c,a,b;
printf("文字を入れて下さい");
c=getchar();
}
これを改良して、アルファベットの大文字を入れると小文字に、小文字をいれると大文字に変換するプログラムにしてください!
0056デフォルトの名無しさん
2006/04/25(火) 21:25:330057デフォルトの名無しさん
2006/04/25(火) 21:33:04swich(c){case a:puts('A');
以下zまで
}
0058デフォルトの名無しさん
2006/04/25(火) 21:35:55ASCIIコードをなんかかえるみたいなんですが、0x20みたいにです
0059デフォルトの名無しさん
2006/04/25(火) 21:42:51いいからどっか逝け。
0060デフォルトの名無しさん
2006/04/25(火) 21:50:27if(c=='a'){c='A';}
else if(c=='b'){c='B';}
...
else if(c=='A'){c='a';}
...
else if(c=='Z'){c='z';}
0061デフォルトの名無しさん
2006/04/25(火) 21:56:530062デフォルトの名無しさん
2006/04/25(火) 22:01:500063デフォルトの名無しさん
2006/04/25(火) 22:18:441バイトずつ変数に受けて printf しようとする場合、
受ける変数は、char がいいのかな、それとも unsigned charがいいのかな。
それともどちらでもいいのかな。
0064デフォルトの名無しさん
2006/04/25(火) 22:39:48int
0065デフォルトの名無しさん
2006/04/25(火) 22:40:26よくおぼえてないんでためしにやってみれ
0066デフォルトの名無しさん
2006/04/25(火) 22:47:350067デフォルトの名無しさん
2006/04/25(火) 23:57:270068デフォルトの名無しさん
2006/04/26(水) 00:09:050069デフォルトの名無しさん
2006/04/26(水) 00:10:10ん? ((1 + a) * 3 + 5) / 2 のようなやつ?
それならいくらでも好きなだけお使いください。
0070デフォルトの名無しさん
2006/04/26(水) 00:10:28ども
0071デフォルトの名無しさん
2006/04/26(水) 00:12:14char で受けて2桁の16進数として出力する場合は & 0xff しないとマイナスの時に
やたら桁の大きな値が出て楽しいことになる。
0072デフォルトの名無しさん
2006/04/26(水) 00:19:320073デフォルトの名無しさん
2006/04/26(水) 00:45:26unsigned char でキャストすればいいだけだろ。
0074デフォルトの名無しさん
2006/04/26(水) 14:22:070075デフォルトの名無しさん
2006/04/26(水) 14:34:58while(b) {
continue;
}
}
これだとcontinueではwhile(a)に戻りますが
while(b)に戻す方法はないのでしょうか
0076デフォルトの名無しさん
2006/04/26(水) 14:48:110077デフォルトの名無しさん
2006/04/26(水) 14:48:19007875
2006/04/26(水) 15:07:29自分のソースではwhile(b)の部分にdoステートメントを使ってたのが勘違いの原因だったみたいです
0079デフォルトの名無しさん
2006/04/26(水) 15:09:20do {
while(b);
continue;
}
こうか。
008075
2006/04/26(水) 15:13:24while(a) {
do {
continue;
} while(0); //while(b)
}
これでdoに復帰するのだと思い込んでたらしいです
俺馬鹿('∀`)アハハ・・・ハァ
0081デフォルトの名無しさん
2006/04/26(水) 15:21:35それでdoに戻る訳だが…?
0082デフォルトの名無しさん
2006/04/26(水) 15:22:03while に飛ぶね。
while(a) {
do {
continue;
break;
} while(1);
}
これならおkだが、
while(a) {
LOOP:
goto LOOP;
}
か
while(a) {
while(foo()) { }
}
int foo() {
return 1;
return 0;
}
の方がすっきりする。
0083デフォルトの名無しさん
2006/04/26(水) 15:23:170084デフォルトの名無しさん
2006/04/26(水) 15:24:260085デフォルトの名無しさん
2006/04/26(水) 15:26:37max();とかあればいいのに・・・
0086デフォルトの名無しさん
2006/04/26(水) 15:27:260087デフォルトの名無しさん
2006/04/26(水) 15:29:130088デフォルトの名無しさん
2006/04/26(水) 15:29:53C だと qsort みたいなややっこい実装にならざるを得ない。
0089デフォルトの名無しさん
2006/04/26(水) 15:32:36自作の何が不満だ?
0090デフォルトの名無しさん
2006/04/26(水) 15:35:13とくにない。たまに時間ないとき面倒に思うときがある。そんだけ
0091デフォルトの名無しさん
2006/04/26(水) 15:35:350092デフォルトの名無しさん
2006/04/26(水) 15:47:16まぁね・・・
0093デフォルトの名無しさん
2006/04/26(水) 17:34:42そうだ!C にも template を導入してくれればいいんだ!
0094デフォルトの名無しさん
2006/04/26(水) 17:43:11これで我慢しろ
0095デフォルトの名無しさん
2006/04/26(水) 18:26:30それ C ちゃう
C++ や!
0096デフォルトの名無しさん
2006/04/26(水) 21:28:16どうしたらいいのかわかりません。
わからないことを例にして書きます。
CDをDVD-RAMに変換 ()は文字数です
ABCDEFG\0(8)の⇒ABDVD-RAMEFG\0(13)
この例だと、mallocで8のサイズの領域を作成、しかし変換後は13文字になる。
そしたら領域から文字列から溢れる。
変換後にどれだけの文字数になるか分からないのでめいっぱい領域確保するという手もあるのですが
領域は出来るだけ抑えたいと思っています。
これの解決方法を教えてください。
0097デフォルトの名無しさん
2006/04/26(水) 21:34:490098デフォルトの名無しさん
2006/04/26(水) 21:47:18それに変換場所が一箇所とは限らない。
例)
AをANSYA変換だとすると
KOUDAGAKUTO⇒KOUDANSYAGANSYAKUTO
同じところはもう一度変換しないとして、
変換する文字列が何回出てくるか数えてからmallocなんですかね?
0099デフォルトの名無しさん
2006/04/26(水) 22:28:260100デフォルトの名無しさん
2006/04/26(水) 23:24:08並べる方法が分かりません、ヒントください。
0101デフォルトの名無しさん
2006/04/26(水) 23:25:550102デフォルトの名無しさん
2006/04/26(水) 23:26:070103デフォルトの名無しさん
2006/04/26(水) 23:26:16入門書でも買ってきたら?
0104デフォルトの名無しさん
2006/04/26(水) 23:33:27ifBがAよりLargeならA and Bをchenging汁。
0105デフォルトの名無しさん
2006/04/26(水) 23:39:290106デフォルトの名無しさん
2006/04/26(水) 23:57:36一個ずつ全部比べて並び替え
0107デフォルトの名無しさん
2006/04/27(木) 00:05:120108デフォルトの名無しさん
2006/04/27(木) 02:12:530109デフォルトの名無しさん
2006/04/27(木) 02:14:04chenging!!
0110デフォルトの名無しさん
2006/04/27(木) 02:15:34swapしろと言いたかったのかな
0111デフォルトの名無しさん
2006/04/27(木) 02:57:57通報しました
0112デフォルトの名無しさん
2006/04/27(木) 03:20:49char *get_int(char *b, int *i)
{
int num = 0;
/* 初期値 */
*i = 0;
/* スペーススキップ */
SKIP(b);
/* 十進数文字である間はエンドレス */
while (isdigit(*b)){
num++;
/* これまでに得た整数の位取りアップ */
*i *= 0;
*i += (*b - '0');
/* 次の文字へ */
b++;
}
/* 十進数字が一つもなければエラーリターン */
if(num == 0) b = NULL;
return b;
}
このようなプログラムを説明するとどういう風になりますか?
位取りとアスキーコードの部分あとb++がどうしても上手く表現できません
0113デフォルトの名無しさん
2006/04/27(木) 03:31:310114デフォルトの名無しさん
2006/04/27(木) 03:34:16○ *i *= 10;
0115デフォルトの名無しさん
2006/04/27(木) 03:34:41*i *= 0; は *i *= 10; の間違いだよな?
SKIP関数がなにするのかよくわからんけど大体あってるんじゃね?
0116112
2006/04/27(木) 03:37:52御指摘ありがとうございます。
このソースをどのような処理をしているかがどうしても説明できなくて困ってます。
仕様書を書かなくてはならなくてそれがどうしても出来ない状態です・・・・
0117デフォルトの名無しさん
2006/04/27(木) 03:38:360118デフォルトの名無しさん
2006/04/27(木) 03:40:02すませんです。
かなり切羽詰ってて。
とりあえず自分でも調べておきます。
後でまた見ます。それでは
0119デフォルトの名無しさん
2006/04/27(木) 09:44:42> このソースをどのような処理をしているかがどうしても説明できなくて困ってます。
> 仕様書を書かなくてはならなくてそれがどうしても出来ない状態です・・・・
中身を理解していないからだ。
そもそも、仕様書はコーディング前に書くものであって、
コーディング後に書くものではない。
0120デフォルトの名無しさん
2006/04/27(木) 10:57:02>コーディング後に書くものではない。
…えっ!?
0121デフォルトの名無しさん
2006/04/27(木) 11:00:48ム板ならソースを書く前に完成しているのが常識 > 仕様書
0122デフォルトの名無しさん
2006/04/27(木) 11:01:33realloc、足りなくなったら再確保しろ
0123デフォルトの名無しさん
2006/04/27(木) 11:20:20数えるコードを書いてもいいかもしれない。
元の文字列がたいしたサイズでなかったら、無条件に三倍程度の
サイズをmalloc()でもいいだろうし。
0124デフォルトの名無しさん
2006/04/27(木) 12:00:08コンピュータ苦手で
0125デフォルトの名無しさん
2006/04/27(木) 12:07:16宿題なら宿題スレへ。
アルゴリズムを知りたいならアルゴリズムスレへ。
そうでないなら初心者向けスレへ。
0126デフォルトの名無しさん
2006/04/27(木) 12:27:28つ解の公式
0127デフォルトの名無しさん
2006/04/27(木) 12:30:16> コンピュータ苦手で
じゃあ、使うな
0128デフォルトの名無しさん
2006/04/27(木) 12:50:36おそらく、
文字列を十進数字とみなしてその値を引数に返す関数。
0129デフォルトの名無しさん
2006/04/27(木) 16:02:29今、C言語の勉強してるんですけど、テキストファイルとバイナリファイルの差って何ですかね?
ちなみにバイナリファイル以外がテキストファイルです。っていう答えは無しでおねがいします。
0130デフォルトの名無しさん
2006/04/27(木) 16:07:12で構成されているファイルがテキストファイル
0131デフォルトの名無しさん
2006/04/27(木) 16:14:39印字可能な文字集合 + 空文字(改行コード/SPC/TAB) のみのバイト列で構成されてる
…で良いのか?
# 文字セットのこと考えると難しいねぇ
0132デフォルトの名無しさん
2006/04/27(木) 16:15:140133デフォルトの名無しさん
2006/04/27(木) 16:19:42ファイルの扱い方の違い。どんなファイルも0と1のデータが並んでるだけ。
バイナリファイルとして扱えば1バイト読み込むとかが出来るし。
テキストファイルとして扱えば1文字読み込むとか1行読み込むとかが出来る。
ただテキストファイルとして扱ったときに文字を表すデータが入ってないと文字化けしたり変な挙動したりする。
0134デフォルトの名無しさん
2006/04/27(木) 16:22:54テキストファイルの事はよくわかりました。
まだ、バイナリファイルが良くわからないのですが?
0135デフォルトの名無しさん
2006/04/27(木) 16:23:210136デフォルトの名無しさん
2006/04/27(木) 16:28:49133を読む前に書いてしまったので・・・。
0137デフォルトの名無しさん
2006/04/27(木) 16:31:34あと、バイナリファイルで読む込んだものをテキストファイルとして利用できるのですか?
0138デフォルトの名無しさん
2006/04/27(木) 16:35:370139デフォルトの名無しさん
2006/04/27(木) 16:36:38したがって、おそらくテキスト文書は、この制御文字の中で、
改行を表す\r\n(CRLF:キャリッジリターン(行先頭復帰)+ラインフィード(1行送り))を表す
0D(\r)とA(\n)しか使えない。
なぜなら、例えばテキストにff(DEL操作)の文字なんか入れられない(文字削除になる)。
バイナリエディタがあったら、適当にテキストに文字を打って、それをエディタで開いてみればいい、
ENTERしたところは、\r\n(0D0A)があって、最終行を改行しなければ\r(0D)になる。
バイナリファイルというのは、CPUが実行できるマシン語だから、当然0〜31、127は含まれている。
当然、.txtを.binに変換してもマシン語で使っている1〜32と127が使えなければ実行できない(使ってないマシン語がなければ別だけどw)
ちなみに、改行は\n(一行送り)だけでいいではないかと思うけれど、
タイプライタが、改行は、一度、行の頭に戻ってから、一行送るという、名残。
Cではprintf("ほにゃらら\n");
と\nだけで通用する。
officeアプリは\r\nじゃないとだめだったと思う、他にも・・・あったかな、忘れた。
0140デフォルトの名無しさん
2006/04/27(木) 16:38:350141デフォルトの名無しさん
2006/04/27(木) 16:41:24>0から31
0から32
>1〜32
0から32
要は使えないのは0〜32(ヘキサで00〜20)と127(同じくff)
(あ、\rと\nは省いて)
>>138
「説明できないのは分かっていない証拠」
と教えてもらったことがある
0142デフォルトの名無しさん
2006/04/27(木) 16:42:56わかってないなら説明しなきゃいいのに。
0143デフォルトの名無しさん
2006/04/27(木) 16:48:26いつからバイナリファイル=マシン語になったんだ?
0144デフォルトの名無しさん
2006/04/27(木) 16:50:40>「説明できないのは分かっていない証拠」
まあ、>>139 みたいに説明されると
「ああ、こいつまるで解ってねーや」ってのが判断できるわけだしね。
>>137
はっきりした定義があるわけじゃない。
とりあえずメモ帳で開いて、半角中黒が使われてなければテキストファイルだと思っとけ。
このスレ的には、「一部の環境 (OS、コンパイラ) では、ファイルオープン時にテキストだと明示
すると、改行コードや文字コードの変換をしてくれる “かもしれない”」としか。
0145デフォルトの名無しさん
2006/04/27(木) 16:51:37例えば、メモ帳だと、認識できないコードは■になる。(要は、エディタやエンコードによる)
それで利用できるなら使える。
0146デフォルトの名無しさん
2006/04/27(木) 17:00:49まあ、確かに。
バイナリと一言にいっても広いし。
例えば、圧縮解凍ソフト作って、圧縮ファイルの拡張子を.binにしたっていいわけだし。
0147デフォルトの名無しさん
2006/04/27(木) 17:02:490148デフォルトの名無しさん
2006/04/27(木) 17:04:050149デフォルトの名無しさん
2006/04/27(木) 17:17:30プログラムの側はそれをテキストとして扱うかどうかを決められるに過ぎない。
テキストとして書いたファイルは同じシステムや互換性のあるシステムでテキスト
として読むことが可能ということ。互換性のないシステムではそのままでは
テキストとしては扱えないかも知れない。扱えない場合はバイナリとして開いて
自分で変換しながら読むとか、あるいは予め変換してから読むことになる。
0150デフォルトの名無しさん
2006/04/27(木) 17:36:110151デフォルトの名無しさん
2006/04/27(木) 17:39:510152デフォルトの名無しさん
2006/04/27(木) 17:49:38内容はバイナリだよ。
扱い方がテキストだったり画像だったりするだけ。
0153デフォルトの名無しさん
2006/04/27(木) 17:55:49エディタで開いてみて、文字っぽかったらテキストファイル。
0154デフォルトの名無しさん
2006/04/27(木) 17:56:06こんなんどう?
1.コンピュータは今のところ、電圧が低い・高いの2つしか判断ができなくて、それぞれを0と1とする。
2.0と1だけで表した数字を2進法といい、例えば、1+1=10、10+1=11 となる。
3.コンピュータ(内部)は基本的にこの2進法で計算(処理)することになる。
4.我々が普段使っているのは10進法であるが、2進法と10進法は相互に変換可能である。例:11(2進法)=3(10進法)
5.ファイルというのは通常HDDに保存されているが、2進法で保存されており、磁気(S極、N極)を0と1としている。
6.実は2つ(0と1)を表せるものならなんでもよく、例えばCDならば穴が開いている、開いていないという方法で保存されている。
7.各文字には数字が割り当ててあり、例えばアルファベットのA=65といった感じである。
8.どの文字にどの数字を割り当てるかには色々な規格があり、規格によって割り当て方が異なる。(規格例:SJIS、EUC)
9.この規格にそって保存されたファイルを通常、テキストファイルと称されている。それ以外をバイナリーファイルと言う。
10.ソフト(エディタ等)はファイルを読み込むと、ファイルに書かれてある数字を文字に変換し画面に出力する。
11.先述したようにこの文字⇔数字変換の規格は多種あり、規格通りの変換が行われないと、文字化けといった現象が起こる。
12.バイナリエディタとはこの文字⇔数字変換を行わずに、数字をそのまま画面に出力するエディタである。
13.2進法で数字を画面出力すると、011101101001010 といった感じになり人間には非常にわかりずらい。
14.そこで、2進法との相互変換が容易な16進法がコンピュータ世界ではよく使われている。
15.バイナリエディターでは通常、人間が見やすいこの16進法で画面出力される。
0155デフォルトの名無しさん
2006/04/27(木) 18:00:00で?
0156デフォルトの名無しさん
2006/04/27(木) 18:59:21形式にすぎない
おわり
0157デフォルトの名無しさん
2006/04/27(木) 20:00:23制御コードはファイル内だけにとどまらず、
オブジェクト間、ファイル間、プロトコルにもあるわけだけど、
BASE64に話が続くかと思いきや、やっぱりでないか。
前者2つは思いっきり環境依存だからしようがないと言えば、しようがない
0158デフォルトの名無しさん
2006/04/27(木) 20:15:150159デフォルトの名無しさん
2006/04/27(木) 20:52:44pbm/pgm/ppm画像は?
0160デフォルトの名無しさん
2006/04/27(木) 21:42:20自分の知っている、うんちくを語りたかっただけです
( ´,_ゝ`)プッ
0161デフォルトの名無しさん
2006/04/27(木) 21:45:50確かにlinuxの場合もファイル操作する場合拡張子なんて意識しなかった
希ガス
0162デフォルトの名無しさん
2006/04/27(木) 21:49:27ハァ?拡張子??なんでそんなもんがでてくるんだ?
0163デフォルトの名無しさん
2006/04/27(木) 21:51:24下のようにしたらVC++とgcc用に大文字小文字を区別しない比較が出来ると聞きました。
VC++は_WIN32がデフォルト定義されているというので分かるのですが
elseならgccと判定してしまうのはどうなのかと思うのです。
もし他のコンパイラ(私は何があるか詳しくない)だった場合のために
#ifdefで判定できないでしょうか?
#ifdef _WIN32
#include <string.h>
#define STRCMP(s1,s2) stricmp(s1,s2)
#else
#include <strings.h>
#define STRCMP(s1,s2) strcasecmp(s1,s2)
#endif
0164デフォルトの名無しさん
2006/04/27(木) 21:58:28つ __GNUC__
0165デフォルトの名無しさん
2006/04/27(木) 22:08:51__GNUC__は、gccですよね?
それとこういうことが詳しく載ってるサイトは知らないでしょうか?
自分用にライブラリ付くリョウと思っています。
0166デフォルトの名無しさん
2006/04/27(木) 22:17:39#elif defined(__GNUC__)
0167デフォルトの名無しさん
2006/04/27(木) 22:33:07コンパイラ判別用のマクロなら、↓ここの Compilers とか
Pre-defined C/C++ Compiler Macros
ttp://predef.sourceforge.net/index.php
0168デフォルトの名無しさん
2006/04/27(木) 22:45:18このなかでよく使われているコンパイラってどんだけあるの?
ここを見た限り、VC++は_WIN32より_MSC_VERで判定したほうがいいの?
ちなみに私は英語苦手なのでまだ軽くしか見ていません。
間違ってても気にしないで!
0169デフォルトの名無しさん
2006/04/27(木) 22:46:38ちゃんと見てから言えよ・・・
0171デフォルトの名無しさん
2006/04/27(木) 23:18:30i[5] = 10; と入れてもエラーにならないのはなぜですか?
0172デフォルトの名無しさん
2006/04/27(木) 23:19:340174デフォルトの名無しさん
2006/04/27(木) 23:24:000176デフォルトの名無しさん
2006/04/27(木) 23:27:570177デフォルトの名無しさん
2006/04/27(木) 23:32:370178デフォルトの名無しさん
2006/04/27(木) 23:35:210179デフォルトの名無しさん
2006/04/28(金) 00:09:36配列の変数が表しているのは配列の先頭要素へのポインタに過ぎない。
そのポインタをインデックスで指定された分だけオフセットして各要素にアクセスしている。
したがって、配列の長さを超えるようなインデックスを指定しても、
その参照先のアドレスが予めプログラムが確保しているメモリ領域に収まっていれば、
必ずしもエラーにはならない。
ただし、その参照先のアドレスは、他の変数などに割り当てられている可能性があり、
その内容を書き換えれば意図しない動作をもたらすことがある。
0180デフォルトの名無しさん
2006/04/28(金) 00:10:19つうか聞いてばかりじゃなくてやってみれ
0181デフォルトの名無しさん
2006/04/28(金) 00:33:270182デフォルトの名無しさん
2006/04/28(金) 00:37:21例えば、アクセスを試みて、アクセスできなかった時などがある。
0183デフォルトの名無しさん
2006/04/28(金) 00:39:17論理的にお願いします。
0184デフォルトの名無しさん
2006/04/28(金) 00:47:27#include <windows.h>
typedef struct {
int i[1];
void (*func)(void);
} hoge;
void hello() { printf("Hello, World!\n"); }
int main() {
hoge fuga;
ZeroMemory(&fuga, sizeof(hoge));
fuga.func = hello;
fuga.i[1] = NULL;
fuga.func();
return 0;
}
0185デフォルトの名無しさん
2006/04/28(金) 00:50:170186デフォルトの名無しさん
2006/04/28(金) 00:51:330187デフォルトの名無しさん
2006/04/28(金) 00:54:19ふざけないでください
0188デフォルトの名無しさん
2006/04/28(金) 01:15:30ならwindows.hはない
あと仮にVC環境ならスペースは受け付けない、すべてTABにしな
0189デフォルトの名無しさん
2006/04/28(金) 01:16:00配列を宣言したときにメモリが確保されると思うのですが、
そのとき確保されるメモリアドレスは連続したものなのでしょうか
具体的にいうと
char gefo[100];
と定義して
&gefo ++;
を400回繰り返した場合、最後にはgefo[100]用のメモリの
一番後ろのバイトに到達していると考えていいものでしょうか?
0190デフォルトの名無しさん
2006/04/28(金) 01:19:25400は普通に通り越してるよね?
0191デフォルトの名無しさん
2006/04/28(金) 01:22:11そうなんですか・・・・
char型は4バイトだからポインタ演算?するときは
配列100個だったら、400回たすのかなーと考えてたんですが;
0192デフォルトの名無しさん
2006/04/28(金) 01:23:37違う、連続していない
だから、逆に配列はアセンブラじゃなくCで書いたほうが効率がよいのができたりする。
違う型を含む構造体ももちろんそう。
どう飛ぶかはCPUの命令セットのアドレッシングの方式による
0193デフォルトの名無しさん
2006/04/28(金) 01:23:410194デフォルトの名無しさん
2006/04/28(金) 01:25:41って、
&(gefo++) (&gefo)++
のどっちになるんだっけ?
0195189
2006/04/28(金) 01:30:59>どう飛ぶかはCPUの命令セットのアドレッシングの方式による
うーむなるほど・・・
どうもまだまだ勉強が足りないみたいです。
K&Rを再読してきまつ
ありがとうございました。
0196デフォルトの名無しさん
2006/04/28(金) 01:39:41ブラウザ経由で実行すると、共有ライブラリが無いよ、のエラーになります。
LD_LIBLARY_PATHとか、httpd.confのSetEnvとか、ldconfigとか試しましたが、
現象変わらずです。
ldd というコマンドが有るとわかったので、コンパイルした実行形式をlddしてみると、
問題ないのですが、cgi-binにコピーしてlddすると、無いよと言われる共有ファイルが、not found
になります。
これ、ナニが問題なのでしょうか?
0197デフォルトの名無しさん
2006/04/28(金) 01:40:490198170
2006/04/28(金) 01:49:58入れておいたほう便利なものってあります?
0199デフォルトの名無しさん
2006/04/28(金) 01:57:290200デフォルトの名無しさん
2006/04/28(金) 02:03:51前を見ろ堅実になれ、もっと考えろ想像しろ
以上
0201デフォルトの名無しさん
2006/04/28(金) 02:15:170202デフォルトの名無しさん
2006/04/28(金) 02:23:07int WINAPI WinMain(
HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmdLine, int nCmdShow)
{}
と
int main(int argc, char* argv[]){}
をどっち使ったほうがいいんですか?
0203デフォルトの名無しさん
2006/04/28(金) 03:27:54どっちでもええ
つーか、どうでもええ
0204デフォルトの名無しさん
2006/04/28(金) 04:44:5800045/* Throw away the parameters for K&R prototypes. */
00046#define _PROTOTYPE(function, params) function()
このプロトタイプ宣言の意味がいまいち分からないのですが。
00483_PROTOTYPE( void _exit, (int _status) );
00484_PROTOTYPE( int access, (const char *_path, int _amode) );
こんな感じで使ってるんですけど,パラメータ捨てちゃって何か意味があるんでしょうか。
あとプロトタイプ宣言ってそもそも戻り値が必要ではなかったでしたっけ。
http://www.minix3.org/doc/AppendixB.txt
0205デフォルトの名無しさん
2006/04/28(金) 06:48:10これ、なんて書いてあるか分かる?
↓
Throw away the parameters for K&R prototypes.
0206デフォルトの名無しさん
2006/04/28(金) 09:01:36> char型は4バイトだから
char型は1バイトだ。
# ビット数は環境依存
ついでに、配列型に対して「++」や「--」は出来ない。
>>192
> 違う、連続していない
連続しているから「配列」な訳だが。
0207デフォルトの名無しさん
2006/04/28(金) 09:03:44char以外でも配列は連続した領域が割り当てられる
0208デフォルトの名無しさん
2006/04/28(金) 09:19:41仮想メモリなんて崩壊してしまう
0209デフォルトの名無しさん
2006/04/28(金) 10:11:11いつ誰が「物理的に」と言ったんだ?
0210デフォルトの名無しさん
2006/04/28(金) 10:13:13なくていいよ?
どっかいけ。
0211デフォルトの名無しさん
2006/04/28(金) 10:14:330212デフォルトの名無しさん
2006/04/28(金) 10:23:290213デフォルトの名無しさん
2006/04/28(金) 10:45:52>>189はメモリアドレスと言っているけど、それが物理アドレスを指しているのか仮想アドレス
を指しているのかは分からないよね。
質問の内容からすると仮想アドレスと取っていいと思うけど。
個人的には、>>192の意見をもうちょっと詳しく説明して欲しい。
0214デフォルトの名無しさん
NGNGchar配列を4バイトなり8バイトにアライメントするような処理系があるかどうかは知らんが。
0215デフォルトの名無しさん
2006/04/28(金) 11:44:450216デフォルトの名無しさん
2006/04/28(金) 12:18:54(そんな実装、今時あるかどうかは知らない)
0217デフォルトの名無しさん
2006/04/28(金) 12:20:230218デフォルトの名無しさん
2006/04/28(金) 12:40:530219デフォルトの名無しさん
2006/04/28(金) 13:15:54ポインタ=アドレス+型 じゃないの?
まあ、この「アドレス」がCPUレベルでの
「アドレス」と等しい必要は無いが。
0220デフォルトの名無しさん
2006/04/28(金) 18:12:03規格嫁
0221192
2006/04/28(金) 21:31:52>char の場合に限定すれば連続してるんじゃまいか
確かに。
基本的にchar型は1byteだけど、コンパイラにより可変長になりうるから
・例えば、char fuga="abc";として、a[0]で'a'を取り出せる。
・逆にfuga[0]='a',fuga[1]='b'でfugaは配列の先頭を表す('a')
連続している。
ただ、これはCの仕様というか使いやすくするための特別な仕様であって、配列の基本はこうじゃない。
基本的な配列は連続したアドレスではない(論理アドレスだろうと、実アドレス変換した物理アドレスだろうとスタックは連続した領域採るでしょう)。
まあ、ものは試しで、以下のをデバッグ掛けてメモリ見てみてよ、皆さん方。
上は、連続したアドレスを採る。下はアドレスが飛び飛びになる。
配列としては下がメインタイプ。ちなみに自環境はVC。
例1)
#include<stdio.h>
void main(void){
char a[6]={'a','b','c','d','e'};
printf("%s",a);
}
例2)
#include<stdio.h>
void main(void){
char* name[3];
name[0]="あいうえお";
name[1]="かきくけこ";
name[2]="さしすせそ";
printf("%s",*name);
}
あと、仮想メモリというのは、ハードディスクに一時領域採る事じゃないかな。
0222デフォルトの名無しさん
2006/04/28(金) 21:38:16上も下も連続してるだろ。
0223デフォルトの名無しさん
2006/04/28(金) 21:39:450224デフォルトの名無しさん
2006/04/28(金) 21:47:360225デフォルトの名無しさん
2006/04/28(金) 21:48:14実際メモリ見て言ってる?
まさか[]内の数値見て言ってわけじゃ・・
机上の空論言っても堂々巡りだと思うけど
たったこれっぽっちのソース出せば明らかになるじゃん
0226デフォルトの名無しさん
2006/04/28(金) 21:50:29あー、そういうことか。
喰い違いがあったか。
言ってるとおり、あーお、かーこ、さーそ、の3つは連続していない。
0227デフォルトの名無しさん
2006/04/28(金) 21:54:39じゃ、具体的にどこが連続してないって言ってるの?
0228デフォルトの名無しさん
2006/04/28(金) 21:55:25フツーに連続してる。
0229デフォルトの名無しさん
2006/04/28(金) 22:02:08確かにデバッグできるコンパイラ持ってない人も居るわけだな。
「お」と「か」、「こ」と「さ」の間はいくつかの00で埋められている。
だからこそ、下の実行結果は
あーそ
で出ずに
あーおで終わる
コード00は「何もしない」を表す。
0230デフォルトの名無しさん
2006/04/28(金) 22:02:59念のためにVCで実行してみたけど、並んでるようにしか見えない。
main()
{
char *name[3];
printf("%p %p %p\n", &name[0],&name[1],&name[2]);
}
--
結果
0012FF74 0012FF78 0012FF7C
0231デフォルトの名無しさん
2006/04/28(金) 22:04:54それ、何も値が入ってないけど、判別できんのかいな。
0232デフォルトの名無しさん
2006/04/28(金) 22:05:27ポインタの配列の意味分かってるんだろうか
デバッガの出力より先に理解する事があるだろ
0233デフォルトの名無しさん
2006/04/28(金) 22:06:12お前あほだろ。
元の質問は、配列が並んでるかどうかの話だろ。
ソース上に現れる文字列リテラルが連続してるなんて、そんな勘違いするやつどこにいる。
0234デフォルトの名無しさん
2006/04/28(金) 22:07:31こんだけしったかぶって、配列の要素のアドレスと、中に入ってる値の
区別がついてないやつ。
0235デフォルトの名無しさん
2006/04/28(金) 22:09:14char*だから、一つ要素に対しての4バイトのメモリ領域を取っている?
配列要素が3つだから全部で12バイト?
0236デフォルトの名無しさん
2006/04/28(金) 22:11:38「どう解釈」って、まさか>>230のソースのことか?
とりあえず、GW中は入門書でも読んどけ。
0237デフォルトの名無しさん
2006/04/28(金) 22:12:06確かに。例が悪かった。
ただ、確認してみたけど、&name[1],&name[2],&name[3]は連続していずにはるか彼方にある。
通常の**とは違っている。
0238デフォルトの名無しさん
2006/04/28(金) 22:13:290239デフォルトの名無しさん
2006/04/28(金) 22:15:16あっ、ごめん。
>>221のソースです。
>>230のように解釈するのが普通と思っていたから。
なんで連続でないって言っているかが不思議に思って。
で、>>230を見ると、4バイトずつ増えているからやっぱり連続だね。
0240デフォルトの名無しさん
2006/04/28(金) 22:15:35こいつまだ言ってる。
なんか適当に難しそうなこといって、周囲をけむにまくのが習性になってるんだろうな。
0241デフォルトの名無しさん
2006/04/28(金) 22:19:36ポインタ死ね
なんていうスレも立つわけだ
0242赤ペン先生
2006/04/28(金) 22:20:17> >232
> 確かに。例が悪かった。
頭が
(事実歪曲)
> ただ、確認してみたけど、&name[1],&name[2],&name[3]は連続していずにはるか彼方にある。
おらず
(日本語の間違い)
> 通常の**とは違っている。
脳内の
(病院池)
0243デフォルトの名無しさん
2006/04/28(金) 22:28:21たまにはコンピュータの動作原理とかプログラムの動作原理とか勉強するのも無駄にはならないぜ。
0244デフォルトの名無しさん
2006/04/28(金) 22:32:080245デフォルトの名無しさん
2006/04/28(金) 23:13:24なんだようやく判ったよ。
>>192は釣りだったって…orz
0246デフォルトの名無しさん
2006/04/28(金) 23:24:220247デフォルトの名無しさん
2006/04/28(金) 23:29:13そうなのか?
0248デフォルトの名無しさん
2006/04/28(金) 23:43:43けど、釣りな結果は運がよかっただけだな。
色々試すとそのうち・・・
>247
NULL
0249デフォルトの名無しさん
2006/04/28(金) 23:47:50アドレスバス幅>データバス幅
0250デフォルトの名無しさん
2006/04/28(金) 23:48:070251デフォルトの名無しさん
2006/04/28(金) 23:57:37だいぶ違うな。
それ使い分けできてないと、本当に素人くさいよな。
つかいわけつーか「コード00は『何もしない』を表す」にいたってはイミ不明だけど。
0252デフォルトの名無しさん
2006/04/29(土) 00:02:17そういや 8080/Z80のNOPは00hだったな。
関係ないけど。
0253デフォルトの名無しさん
2006/04/29(土) 00:26:530254デフォルトの名無しさん
2006/04/29(土) 02:11:53惜しまれるから、運が悪かった場合も張っておこう。
#include<stdio.h>
voidmain(void){
char*name[3];
name[0]="abcde";
name[1]="あいうえお";
printf("%s",*name);
name[2]="fghij";
}
今でもNOPは00hだし、オペコードが00なら何もしないな。
ブルーバックも出ずにそのまま固まる。
オペコードなら0引く0でZフラグが立つ。
0255デフォルトの名無しさん
2006/04/29(土) 02:14:000256デフォルトの名無しさん
2006/04/29(土) 02:15:140257デフォルトの名無しさん
2006/04/29(土) 02:26:060258デフォルトの名無しさん
2006/04/29(土) 05:06:210259デフォルトの名無しさん
2006/04/29(土) 12:05:260260デフォルトの名無しさん
2006/04/29(土) 12:19:270261デフォルトの名無しさん
2006/04/29(土) 12:24:32プログラミング初心者です。
c言語をテキストを買って始めたのですが
C:\work>bcc32 hello.cと入力すると
コンフィグレーションファイル中の オプション間違い:-|"c:\Borland\Bcc55\include"
というエラーが出てしまいます
cfgは こんな感じなんですが
bcc32.cfg
-|"c:\Borland\Bcc55\include"
-L"c:\Borland\Bcc55\lib"
どこが間違っているのでしょうかしょうか?
教えてください。
0262デフォルトの名無しさん
2006/04/29(土) 12:25:360263デフォルトの名無しさん
2006/04/29(土) 12:42:05プロバブリー ミス オブ カレントディレクトリ バイ ワークホーム オ〜イエ
ソウ ファーストタイム コマンドクリック bcc32 バイ コマンドプロンプト。
イフ(エラーなら) エンバイアロメンタルバル を アナライズ。 レッツユーゴーイング
0264デフォルトの名無しさん
2006/04/29(土) 12:45:51>-|"c:\Borland\Bcc55\include"
-I"c:\Borland\Bcc55\include"
ですね
0265デフォルトの名無しさん
2006/04/29(土) 12:50:460266デフォルトの名無しさん
2006/04/29(土) 13:22:17春房が涌く季節だから(w
0267デフォルトの名無しさん
2006/04/29(土) 13:26:47hoge()関数に、structの配列intのカウンタを渡して、hoge内でカウンタまでstructのポインタを進めて、
構造体の中のデータを加工したりしようとしています。
そこで質問です。
hoge()に渡すカウンタの数値が間違っていて、実際の構造体の配列数より大きい値を渡してしまった場合、
hoge()内で構造体の配列以上の領域を参照・書込みしようとして、プログラムが落ちてしまうことがあります。
このとき、hoge()内で、操作しようとしている構造体の領域が、参照・書込みなどが可能な領域かを
判断する方法はあるのでしょうか?
0268デフォルトの名無しさん
2006/04/29(土) 13:34:18書き込んで落ちれば書けないと判断できる
0269デフォルトの名無しさん
2006/04/29(土) 13:34:42どうしてもというならpAAAの最後にはっきりと無効だとわかるデータを用意して
ループ回すたびにチェックしろ。
0270デフォルトの名無しさん
2006/04/29(土) 13:43:390271デフォルトの名無しさん
2006/04/29(土) 13:45:010272267
2006/04/29(土) 13:46:04俺も間違えるほうが悪いと思ってたんですが、hogeはdllだかスタティックリンクライブラリだかにすることになってて、
hoge呼び出し側がどんな値渡してもhoge側で異常を関知して、落ちずに異常を返却しろ、といわれて
質問しました。
0273デフォルトの名無しさん
2006/04/29(土) 13:56:000274デフォルトの名無しさん
2006/04/29(土) 16:55:000275デフォルトの名無しさん
2006/04/29(土) 17:13:58調べても分かりませんですた。
0276デフォルトの名無しさん
2006/04/29(土) 17:17:11-l で調べれ
0278デフォルトの名無しさん
2006/04/29(土) 18:03:05struct MANAGER_STR{
int counter_aaa;
struct AAA_STR *pAAA;
};
で管理すればええ。
0279デフォルトの名無しさん
2006/04/29(土) 18:13:48includeじゃなくてリンクな。
この場合、リンカがlibmを探してプログラム中で使われているライブラリ関数をリンクする。
0281デフォルトの名無しさん
2006/04/29(土) 21:48:340282デフォルトの名無しさん
2006/04/30(日) 00:05:430283デフォルトの名無しさん
2006/04/30(日) 11:05:20C++使ってtry...catchで処理しろ、って事ジャマイカ?
0284デフォルトの名無しさん
2006/04/30(日) 14:48:36gccにありませんでした。同等の機能の関数てないですよね?
0285デフォルトの名無しさん
2006/04/30(日) 14:56:070286デフォルトの名無しさん
2006/04/30(日) 15:06:05どこがスレ違いなんですか?
0287デフォルトの名無しさん
2006/04/30(日) 15:09:47そこで、漏れてきに考えたのだが、
返したい文字列を別の配列として宣言しておいて、
関数でその文字列のポインターを返せるようにしておけば
漏れの脳内ではできそうなのですが、百戦錬磨の諸兄どもは
文字列を返したい場合どうしてマツカ?
0288デフォルトの名無しさん
2006/04/30(日) 15:12:36>48
0289デフォルトの名無しさん
2006/04/30(日) 15:12:58ガチムチオルテガさんは流れるプールの横で懸命にマラをしごいていた。
越中六尺から飛び出している凶器は悪魔そのものですごかった!唖然として
僕が兄貴を眺めてると、兄貴が突然振り向いて眼があってしまい、
そのままオッス!オッス!と連呼して僕に近づいてきた。あとはもうオルテガ
さんの坊主頭が僕の背中を攻め、菊の花をていねいになめまわしまくり、
生物兵器が僕の菊爆弾を何度も何度もオッス!オッス!と鼓動させるのを覚えてるだけです。
ガチムチオルテガさんはすっげー男らしくてなんどもイキまくりました
0290デフォルトの名無しさん
2006/04/30(日) 15:13:23関数内でバッファに文字列を書き込む
Cの標準関数でもこうなってる
0291デフォルトの名無しさん
2006/04/30(日) 15:16:08>>1
> 標準Cではできない事
0292デフォルトの名無しさん
2006/04/30(日) 15:24:06そうですか、そうですか。
0293デフォルトの名無しさん
2006/04/30(日) 15:30:37>>46で既出してますたスマソ
しかし
>>290氏のアイデアは、Cの標準関数でもこうなってる
と書いてあるものの、斬新な感じがする、漏れも脳内で掘下げて
考えてみます、とこでスレ違いですがついでに知っていたら教えてください
ご存知なければスルーで結構です
NET系の関数も(VS2005のVC8とか)文字列の返せる関数はないですよね?
0294デフォルトの名無しさん
2006/04/30(日) 15:35:250295デフォルトの名無しさん
2006/04/30(日) 15:46:19斬新か・・・?
標準関数で例えばsprintfだと
main(){
char buffer[80];
int x = 50;
sprintf(buffer, "x = %d", x);
puts(buffer);
}
こんな感じに使うと思うが、ほんとに斬新だと思う?
ちなみにC++とかなら、string型の変数を返すだけですむのでこんなことしない
0296デフォルトの名無しさん
2006/04/30(日) 15:49:440297デフォルトの名無しさん
2006/04/30(日) 15:54:29sprintfはちゃんと末尾にヌル文字入れてくれなかったっけ?
0298デフォルトの名無しさん
2006/04/30(日) 15:54:29錯覚。そんな余計なことはするもんじゃない。
>>295 >>293
だから>48で既出だってばさ。
0299デフォルトの名無しさん
2006/04/30(日) 15:54:34そうですか調べて見ます
>>295
関数といえば、直接返すことしか考えられない愚民にとっては十分斬新でした
0300デフォルトの名無しさん
2006/04/30(日) 16:16:200301デフォルトの名無しさん
2006/04/30(日) 16:18:100302デフォルトの名無しさん
2006/04/30(日) 16:22:51そんなあなたに初心者系スレ。
http://pc8.2ch.net/test/read.cgi/tech/1124256027/
http://pc8.2ch.net/test/read.cgi/tech/1141087248/
http://pc8.2ch.net/test/read.cgi/tech/1143639945/
0303デフォルトの名無しさん
2006/04/30(日) 16:44:070304デフォルトの名無しさん
2006/04/30(日) 18:10:14class Hoge {
public:
int getX();
void setX(int i_x);
getX(int& i_x);
private:
int x;
};
int Hoge::getX() { return x; }
void Hoge::setX(int i_x) { x = i_x; }
int Hoge::getX(int& i_x) {i_x = x;}
ここで最後のgetXですが、なんとなくgetという名前を与えるのは、
ちょっと違和感があります。一般的にこういった関数にはどういった名前付けをするのでしょうか?
0305デフォルトの名無しさん
2006/04/30(日) 18:11:21http://pc8.2ch.net/test/read.cgi/tech/1144978008/
ここ言ってみな
0306デフォルトの名無しさん
2006/04/30(日) 18:15:06ありがとうございます。行ってきます。
0307デフォルトの名無しさん
2006/04/30(日) 18:19:50最後のgetXにreturnがない訳だが...
それ以前に、Cにクラスはない訳だが...
0308デフォルトの名無しさん
2006/04/30(日) 18:29:171番目はミスでした。
2番目はよさそうなスレがなかったからです。失礼しました。
0309デフォルトの名無しさん
2006/04/30(日) 18:30:16関数の参照使っても返せるけど、
strcpy,sprintfがフローチャート的にいけるからスマートだと思う。
ただし、宣言やmemset等で確保した受ける側の領域超えると、スタックオーバーフローになるから気をつけないと(strlenなんかでチェックかけないと)。
0310デフォルトの名無しさん
2006/04/30(日) 18:32:58関数の参照のように可逆じゃなく不可逆
0311デフォルトの名無しさん
2006/04/30(日) 19:42:36馬鹿丸だしなレスするくらいなら初心者スレへ。
>>308
あんたも初心者スレくらい見つけなさいよ。
ってことで、>302にこの辺追加。
【初心者歓迎】C/C++室 Ver.26【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1143601166/
0312デフォルトの名無しさん
2006/04/30(日) 19:52:32まれに見るほどの突っ込みどころ満載のレスだな ・・・わざとらしいんだよ釣り野郎
0313デフォルトの名無しさん
2006/04/30(日) 19:56:24>>309;
}
fish (>>310-312) {
プゲラ
}
0314デフォルトの名無しさん
2006/04/30(日) 20:00:26int i;
};
struct b {
struct a x;
int j;
}
b xxx;
a *yyy = (struct a*)&xxx;
って書き方あり?
0315デフォルトの名無しさん
2006/04/30(日) 20:12:100316デフォルトの名無しさん
2006/04/30(日) 20:16:56具体的に何が悪いの?
structのつけ忘れとか、;の付け忘れとかでとりあえず文句言ってるの?
0317デフォルトの名無しさん
2006/04/30(日) 20:42:18まあ、色々ミスに目をつぶれば、可能だが、
キャストするよりは、&xxx.x を入れた方がいい。
0318デフォルトの名無しさん
2006/04/30(日) 20:55:15>>314みたいな書き方をしてたような。
0319デフォルトの名無しさん
2006/04/30(日) 20:58:59これなら許す。
a *yyy = (struct a *)((char *)&xxx + offsetof(struct b, x));
0320デフォルトの名無しさん
2006/04/30(日) 21:00:360321デフォルトの名無しさん
2006/04/30(日) 21:06:41俺は今まで offsetof を使っているコードで
ロクな目にあったことが無いのだが?
0322デフォルトの名無しさん
2006/04/30(日) 21:08:21そう書かないと問題が起こるからなの?
でもどういう問題が起こるかちょっと思いつかないんだけど。
0323デフォルトの名無しさん
2006/04/30(日) 21:08:590324デフォルトの名無しさん
2006/04/30(日) 21:09:430325デフォルトの名無しさん
2006/04/30(日) 21:10:440326デフォルトの名無しさん
2006/04/30(日) 21:23:58C++ ならメンバポインタがあるけどな
あれの代わりを自前でやろうとすると無意味にきつい
0327デフォルトの名無しさん
2006/04/30(日) 21:40:25int no;
char name[10];
}
Figure figure = (figure*)alloc(sizeof(figure)*5);
これはどういう意味ですかね?
検索して出てきたプログラムなのですが全くわかりません
0328デフォルトの名無しさん
2006/04/30(日) 21:43:40$ gcc 327.c
327.c:5: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'figure'
0329デフォルトの名無しさん
2006/04/30(日) 21:46:190330デフォルトの名無しさん
2006/04/30(日) 21:47:130331デフォルトの名無しさん
2006/04/30(日) 21:50:08マジレスすると、
int no;とchar name[10];をメンバに持つ構造体5個分の領域を動的確保して、
そのポインタを格納しようとしているのかな。間違ってるけど。
0332デフォルトの名無しさん
2006/04/30(日) 21:54:05エラーのあるコード=つまりゴミを拾っただけ
そこのサイト主がなぜそんなコードを出しているのかをよく読むことがまず必要
0333デフォルトの名無しさん
2006/04/30(日) 22:03:160334デフォルトの名無しさん
2006/04/30(日) 22:13:42typedefの閉じカッコの後にセミコロンがないから、
struct FigureをFigureでtypedefしつつ、figure変数を用意してるんじゃね
同名typedefは推奨できないし、後々Figureを使うことがないなら無意味なコードだな
0335デフォルトの名無しさん
2006/04/30(日) 22:25:56figure自体が型じゃないから二重に間違ってる。
0336327
2006/04/30(日) 22:43:420337デフォルトの名無しさん
2006/04/30(日) 22:46:05全く自分で考えられないならプログラミングなんて止めたら?
0338デフォルトの名無しさん
2006/04/30(日) 22:46:32typedef struct _Figure {
int no;
char name[10];
} Figure;
Figure *figure = (Figure*)malloc(sizeof(Figure)*5);
0339デフォルトの名無しさん
2006/04/30(日) 22:56:58生まれてくるときに生まれてくることを自分で考えられた?
考えられないなら生まれてくるの止めるべきだったね。
遅くないから自殺したら?
0340デフォルトの名無しさん
2006/04/30(日) 22:58:450341デフォルトの名無しさん
2006/04/30(日) 23:05:27自分で問題を解決する能力、しようとする意欲だからな。
それがないなら止めた方が身のためだろう。
0342デフォルトの名無しさん
2006/04/30(日) 23:13:54はっはっは逆切れしてんじゃないよw
そのまま困ってろw
0343デフォルトの名無しさん
2006/04/30(日) 23:18:100344デフォルトの名無しさん
2006/04/30(日) 23:36:360345デフォルトの名無しさん
2006/05/01(月) 19:38:46CPUを100%活用して計算させる事って可能でしょうか?
0346デフォルトの名無しさん
2006/05/01(月) 19:46:150347デフォルトの名無しさん
2006/05/01(月) 19:46:34「CPUを100%活用する」するとはどういう概念のつもりなのかね。
いずれにしても、スレ違いなのでCPUスレなり環境依存スレなり探してネット。
0348デフォルトの名無しさん
2006/05/01(月) 19:57:04私は、セレロンを使用してますが、一時的に割り込み禁止にして
かつCPUの周波数を低くして処理を実施することは可能ですか?
そのようにしたい理由は、ある処理をする際に時間計測したいのですが
やるたびに時間が変わってしまうのです。
あと、マイクロ秒単位の計測ってできますか?
できないようなら、周波数を低くして全体的に処理時間を遅くすることで
どの処理が早いか計測しようと思ってます。
使用するコンパイラBCC5.5、CPUはセレロン600MHzです。
0349デフォルトの名無しさん
2006/05/01(月) 19:58:04ファイルの内容は以下のような感じです。
12.5
23.7
3.8
111.5
試しに1行だけ読み込むのを作ろうと、
double naiyou;
FILE *fp;
fp=fopen("xxx.xxx","r");
fscanf(fp, "%f", &naiyou);
fclose(fp);
というようにやっても入ってくれません。
同じことを下のように整数型でやると、問題ないんですが。
int naiyou1, naiyou2;
FILE *fp;
fp=fopen("xxx","r");
fscanf(fp, "%d.%d", &naiyou, &naiyou2);
fclose(fp);
(naiyou1=12 naiyou2 =5と入る)
この場合、どうして実数型だと入らないのでしょうか。
0350デフォルトの名無しさん
2006/05/01(月) 20:02:42つ[%lf]
>>348
スレ違い。
0351デフォルトの名無しさん
2006/05/01(月) 20:09:20入力は%lfじゃないと駄目なんですか。ありがとうございました。
0352デフォルトの名無しさん
2006/05/01(月) 20:10:10書式指定と変数の型が違う時ってどうなったんだっけ?
0353352
2006/05/01(月) 20:22:17読み取った数値を float だと思って(大抵 16bit) double の領域(大抵 32bit)に書き込むから、読み出した時におかしくなるんだな。
0354デフォルトの名無しさん
2006/05/01(月) 21:04:15処理時間の計測ならプロファイラ使え
0355デフォルトの名無しさん
2006/05/01(月) 22:19:56大文字や _ などの使いどころがいまいちわからないもので・・・
0356デフォルトの名無しさん
2006/05/01(月) 22:30:09コーディングスタイルで検索したらいろいろ出てこない?
0357デフォルトの名無しさん
2006/05/01(月) 22:59:04主観的なものなんだから、推奨もクソもないだろ。
そもそも、誰が推奨するのかと(ry
0358デフォルトの名無しさん
2006/05/01(月) 23:08:52それは自分の周りの人との協定であって
どこぞのサイトだの誰それが言ってるから正しいんだぁぁぁぁ〜みたいな、
だだをこねるオナニー小僧が全てを超越して最も迷惑
仕事は中身で勝負するのが本質であって
コーディング基準を破って得意がることには誰も金を払う価値を感じない
協調性の低い人は組織には向かないんで
一人で完結できる仕事をしたほうが自分と世のため
0359デフォルトの名無しさん
2006/05/01(月) 23:12:53__hoge
とふたつ付ければいいじゃんと言われてめまいを起こした記憶が
0360デフォルトの名無しさん
2006/05/01(月) 23:15:15参考になりました。ありがとうございます
>>357-358
確かに他人の主観は自分に置かれてる環境と=で結びつかないですね
あくまで参考にするまでに留めておきます
0361デフォルトの名無しさん
2006/05/01(月) 23:18:25恥をしのんで訊くけど、_で始まる識別氏ってどういうところが拙いの?
0362デフォルトの名無しさん
2006/05/01(月) 23:21:14処理系用に予約されている。
細かい話をすると _ で始まるもの全部ってわけじゃないが、
混乱を招くので _ で始めない方がいい。
0363デフォルトの名無しさん
2006/05/01(月) 23:26:100364デフォルトの名無しさん
2006/05/01(月) 23:29:17コンパイラの提供者だけを特別視しサードパーティを無視しており
先人の業績の上に築けという思想と真っ向から対立している
0365デフォルトの名無しさん
2006/05/01(月) 23:30:24> 処理系用に予約されている
そんなことはないだろ
0366デフォルトの名無しさん
2006/05/01(月) 23:30:550367デフォルトの名無しさん
2006/05/01(月) 23:33:160368デフォルトの名無しさん
2006/05/01(月) 23:33:23言われるけどそのときの _ と同じ?
0369デフォルトの名無しさん
2006/05/01(月) 23:38:190370デフォルトの名無しさん
2006/05/01(月) 23:39:46そういうセリフは規格見て確認してからにしてはどうか?
0371デフォルトの名無しさん
2006/05/01(月) 23:48:53関数内にグローバル変数のポインタを作って、よりループに近い位置(?)のポインタを
参照させた方がコストは低くなると考えて良いでしょうか?
int global = 1;
void func(void) {
int *p = global;
for(;;) {
if(*p == 1) hoge;
}
}
0372デフォルトの名無しさん
2006/05/01(月) 23:54:08実用上、書くことがあるが
それを C で書いてる時点でガイキチ確定
0373デフォルトの名無しさん
2006/05/01(月) 23:55:23それを言うなら、_が予約されている処理系の具体名を挙げてもらいたいな
俺は、_で始まる名前が好きだから、HPUXでもSolarisでもgccでもWindowsでも使っている
コンパイラにおこられたことはないよ
0374デフォルトの名無しさん
2006/05/01(月) 23:57:06そういう、どういう書き方が速いかって問題は、実際に
計測してみないとわからんよね。
0375デフォルトの名無しさん
2006/05/01(月) 23:58:21それはVisual C++という処理系が自分独自の関数・変数などに使っており、きわめて正しい使い方だ。
>>365
つ規格書。jiscでX3010。
>>368
違う。
0376デフォルトの名無しさん
2006/05/02(火) 00:00:04重症だな…
0377デフォルトの名無しさん
2006/05/02(火) 00:00:39構造体のメンバでもか?
0378デフォルトの名無しさん
2006/05/02(火) 00:02:58予約と言っても大抵の処理系では特に弾くことも無いので、
実際に名前の重複が起こってエラーにならなければ、我々が使ってもコンパイルできてしまう。
言わば紳士協定のようなもの。
0379デフォルトの名無しさん
2006/05/02(火) 00:05:24そういう「ポインタは速い」って言う思い込みによる、
「エセ高速化」ほど迷惑極まりないものはない。
高速化したいなら、プロファイラなどで処理時間を計測し、
ボトルネックを探す事から始めろ。
0380デフォルトの名無しさん
2006/05/02(火) 00:07:010381デフォルトの名無しさん
2006/05/02(火) 00:10:02どう書けば速そうかの見当のつけ方は必要だろ
ボトルネックに関してはそのとおりだが
0382≠379
2006/05/02(火) 00:13:28それじゃ、プロファイリングもせず実測もせずアセンブルリストを眺めることもしないで流言卑語に惑わされるようなことでは高速化なんて夢のまた夢だな。
0383デフォルトの名無しさん
2006/05/02(火) 00:21:52式「globe」:変数の参照のみ
式「*p」:変数の参照+*演算子による演算
>>371の例なら、ポインタの方が遅くなりそうに感じないかね?
実測もせずに↑の様な事を言い出しても、説得力ないだろ?
どう書けば速くなるか?は、実測した後で十分。
そこがボトルネックじゃなければ、考えるだけ無駄。
0384デフォルトの名無しさん
2006/05/02(火) 00:28:20使ったことはありませんでした。
今日使ってみて自作のメモリクリア関数とmemsetを競わしたら
自作とmemsetでは300サイクルもの違いがありました。
クリアバッファは1024byteです。
やはりmemsetを超えることはできないのか・・・・?
0385デフォルトの名無しさん
2006/05/02(火) 00:28:56ポインタ変数がレジスタに割り当てられて、グローバル変数のアドレスが即値で扱われるとか
そういう感じだったらアーキテクチャによっては、ポインタのほうが速くなるね。
最適化によって、グローバル変数には毎回見にいかないかもしれないし。
とにかく実際にみてみないとわからんよ。
0386デフォルトの名無しさん
2006/05/02(火) 00:32:16それじゃ試すべき選択肢が発散するだろ
0387371
2006/05/02(火) 00:34:29ちなみに、371のような処理を漏れの環境で比較してみたところ、
ポインタ参照の方が20%ほど高速でした。ポインタの方がスタック処理が
減って・・・とかいう素人考えが当たっていたのかもしれません。
もうちょっと色々と調べてみたいと思います。
0388デフォルトの名無しさん
2006/05/02(火) 00:37:24C99の規約書か
ネットで調べたら確かに「下線(_)で始まるIDはつけるな」とあった
0389デフォルトの名無しさん
2006/05/02(火) 00:39:000390デフォルトの名無しさん
2006/05/02(火) 01:07:200391デフォルトの名無しさん
2006/05/02(火) 01:11:520392デフォルトの名無しさん
2006/05/02(火) 01:14:57君のところはコーディング規約がないのか?
0393デフォルトの名無しさん
2006/05/02(火) 01:20:540394デフォルトの名無しさん
2006/05/02(火) 01:22:310395デフォルトの名無しさん
2006/05/02(火) 01:41:43気になるのが構造体で定義したIntのアドレスとかこんな風にコンパイラに任せて大丈夫なんだろうか
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct data{ char *name; int id; }data_t;
typedef struct tf_buffer{ void *buffer_orig; void *buffer; size_t seek; }2ch_buffer_t;
void * 2ch_malloc(2ch_buffer_t *2ch, size_t size);
void *2ch_malloc(2ch_buffer_t *2ch, size_t size){
void *addr;
addr = 2ch->buffer;
2ch->buffer = (2ch->buffer + size);
2ch->seek += size;
return addr;}
int main()
{ 2ch_buffer_t *2ch = (void *)malloc(sizeof(2ch_buffer_t));
2ch->buffer_orig = (void *)malloc(1024);
2ch->buffer = 2ch->buffer_orig;
2ch->seek = 0;
data_t *d = (data_t *)2ch_malloc(2ch, sizeof(data_t) * 6);
int i = 0;
for(i = 0; i < 6; i++){
(d + i)->name = (char *)tf_malloc(2ch, (i + 1) * 15);
memcpy((d + i)->name, (const char *)"test", 4);
(d + i)->id = i;}
return (0);
}
0396デフォルトの名無しさん
2006/05/02(火) 01:54:55void* の演算って、OKだっけ?
コンパイル通る?
0397デフォルトの名無しさん
2006/05/02(火) 01:57:29思いつつ確認したいと思い質問させていただきました。
0398デフォルトの名無しさん
2006/05/02(火) 02:03:07まじで?
数字で始まる識別子使えるのか?
まあ、ここに載せるのに置換しただけだとは思うけど。
0399デフォルトの名無しさん
2006/05/02(火) 02:04:29VC6でコンパイルしてみたら、サイズが定義されていませんってエラーになった。
0400デフォルトの名無しさん
2006/05/02(火) 02:06:03識別子が数字で始まってる。
gccおそるべし。
互換性に関するオプションを調べて、指定したほうがいいかも。
0401デフォルトの名無しさん
2006/05/02(火) 02:10:360402デフォルトの名無しさん
2006/05/02(火) 02:12:51するよていだったゴメン
0403デフォルトの名無しさん
2006/05/02(火) 02:16:330404デフォルトの名無しさん
2006/05/02(火) 02:17:55C99なら -std=c99 -pedantic-errors
0405デフォルトの名無しさん
2006/05/02(火) 02:22:34でこの場合どうするんでしたっけ?
JAVA3年ばかりやっていてこの辺さっぱり
忘れました。悲しくなってきました
0406デフォルトの名無しさん
2006/05/02(火) 02:32:550407デフォルトの名無しさん
2006/05/02(火) 02:36:260408デフォルトの名無しさん
2006/05/02(火) 02:38:10それはそれで、まずいこともある。
0409デフォルトの名無しさん
2006/05/02(火) 04:34:16そんな危なっかしいことしないで、memsetとsizeof使いなよ。
0410デフォルトの名無しさん
2006/05/02(火) 04:54:36strシリーズはchar*型の独壇場だし。
構造体とかオブジェクトとかの集合なら、
アクセス関数(set()やget())使って、値渡し&returnが理想だけど、
厳しいなら、アクセス関数の参照使って中でOne or 数クッション置いたり、中でカウンター回して、値変化の双方向の影響汲まないといけないんだろうけど。
0411デフォルトの名無しさん
2006/05/02(火) 08:26:22できるけど、割り込み禁止した状態で使う
用途に適用するんじゃなければ意味が無い。
100万回繰り返して平均とっとけば十分だろ。
0412デフォルトの名無しさん
2006/05/02(火) 19:32:41OSに頼んで自分のCPU優先度を最強にするとかいうのはどう?
またWindowsにはマイクロ秒単位で計測する方法がある。詳しくはWin32APIスレなどで聞け。
0413デフォルトの名無しさん
2006/05/02(火) 20:12:370414デフォルトの名無しさん
2006/05/03(水) 05:47:11同じ目的に対する複数のアルゴリズムや最適化パターンを比べるつもりなら
本番環境と同じ条件でテストしないと「最速」が変わってしまう可能性があるぞ
特にそういうデカい CPU はキャッシュや分岐予測が速度に大きく影響するから
他のタスクをブロックするとあさってな結果がでる
0415デフォルトの名無しさん
2006/05/03(水) 07:00:49のうたりん?
0416デフォルトの名無しさん
2006/05/03(水) 07:05:22char* -> void*
はいいが、問題は
void* -> ???*
のときに ??? 型の境界要求を満たすかどうかだ
0417デフォルトの名無しさん
2006/05/03(水) 11:29:370418デフォルトの名無しさん
2006/05/03(水) 12:32:120000149A 2FD6 MOV.L R13,@-R15
0000149C 2FE6 MOV.L R14,@-R15
0000149E 6163 MOV R6,R1
000014A0 E21F MOV #H'1F,R2
000014A2 6643 MOV R4,R6
000014A4 3122 CMP/HS R2,R1
000014A6 361C ADD R1,R6
000014A8 8F32 BF/S @H'1510:8
000014AA 6D53 MOV R5,R13
000014AC 6063 MOV R6,R0
000014AE C90F AND #H'0F,R0
000014B0 EC01 MOV #H'01,R12
000014B2 30C7 CMP/GT R12,R0
000014B4 6503 MOV R0,R5
000014B6 8F07 BF/S @H'14C8:8
000014B8 3108 SUB R0,R1
000014BA 75FE ADD #H'FE,R5
000014BC 6263 MOV R6,R2
000014BE 76FE ADD #H'FE,R6
0419デフォルトの名無しさん
2006/05/03(水) 12:33:40000014C2 22D4 MOV.B R13,@-R2
000014C4 8DF9 BT/S @H'14BA:8
000014C6 26D0 MOV.B R13,@R6
000014C8 4515 CMP/PL R5
000014CA 8B00 BF @H'14CE:8
000014CC 26D4 MOV.B R13,@-R6
000014CE 65DC EXTU.B R13,R5
000014D0 6753 MOV R5,R7
000014D2 4718 SHLL8 R7
000014D4 257B OR R7,R5
000014D6 6713 MOV R1,R7
000014D8 4709 SHLR2 R7
000014DA 4709 SHLR2 R7
000014DC 6273 MOV R7,R2
000014DE 4208 SHLL2 R2
000014E0 6E53 MOV R5,R14
000014E2 4528 SHLL16 R5
000014E4 4208 SHLL2 R2
000014E6 37C7 CMP/GT R12,R7
0420デフォルトの名無しさん
2006/05/03(水) 12:34:47000014EA 8F0B BF/S @H'1504:8
000014EC 3128 SUB R2,R1
000014EE 26E6 MOV.L R14,@-R6
000014F0 26E6 MOV.L R14,@-R6
000014F2 26E6 MOV.L R14,@-R6
000014F4 26E6 MOV.L R14,@-R6
000014F6 26E6 MOV.L R14,@-R6
000014F8 77FE ADD #H'FE,R7
000014FA 26E6 MOV.L R14,@-R6
000014FC 26E6 MOV.L R14,@-R6
000014FE 37C7 CMP/GT R12,R7
00001500 8DF5 BT/S @H'14EE:8
00001502 26E6 MOV.L R14,@-R6
00001504 4715 CMP/PL R7
00001506 8B03 BF @H'1510:8
00001508 26E6 MOV.L R14,@-R6
0000150A 26E6 MOV.L R14,@-R6
0000150C 26E6 MOV.L R14,@-R6
0000150E 26E6 MOV.L R14,@-R6
0421デフォルトの名無しさん
2006/05/03(水) 12:35:2800001512 31C7 CMP/GT R12,R1
00001514 8B06 BF @H'1524:8
00001516 71FE ADD #H'FE,R1
00001518 6263 MOV R6,R2
0000151A 76FE ADD #H'FE,R6
0000151C 31C7 CMP/GT R12,R1
0000151E 22D4 MOV.B R13,@-R2
00001520 8DF9 BT/S @H'1516:8
00001522 26D0 MOV.B R13,@R6
00001524 4115 CMP/PL R1
00001526 8B00 BF @H'152A:8
00001528 26D4 MOV.B R13,@-R6
0000152A 6043 MOV R4,R0
0000152C 6EF6 MOV.L @R15+,R14
0000152E 6DF6 MOV.L @R15+,R13
00001530 000B RTS
00001532 6CF6 MOV.L @R15+,R12
0422デフォルトの名無しさん
2006/05/03(水) 12:36:12足りぬの語尾が撥音便化したものだろう。
0423デフォルトの名無しさん
2006/05/03(水) 12:56:04丸め誤差って必ず実際の値より小さくなりますよね?
0424デフォルトの名無しさん
2006/05/03(水) 12:57:310425デフォルトの名無しさん
2006/05/03(水) 13:00:10実際の値以下でない場合は無いかもしれない。
0426デフォルトの名無しさん
2006/05/03(水) 13:03:210427デフォルトの名無しさん
2006/05/03(水) 13:22:11どうてい?
0428質問
2006/05/03(水) 14:38:24long double型の場合は「%f」であってますか?
誰か教えてください、お願いします。
0429デフォルトの名無しさん
2006/05/03(水) 14:44:15printfでは%fがdoubleだが、scanfでは%lf。
scanfでの%fはfloat。
printfで%lfは間違い。float型引数もここではどうせdoubleに格上げされるため。
(いわゆるC99では%lfも認められたが)
0430デフォルトの名無しさん
2006/05/03(水) 14:47:41どちらも%Lfだな。
ま、使ってるコンパイラのマニュアル見たほうが正確。
0431428
2006/05/03(水) 14:50:28/* test.c */
#include <stdio.h>
int main()
{
double d = 1;
long double Ld = 1;
printf("d = %f\n", d);
printf("Ld = %f\n", Ld);
return 0;
}
このプログラムの実行結果が
d = 1.000000
Ld = 0.000000
になってしまうのですがなぜだかわかりますか?
0432デフォルトの名無しさん
2006/05/03(水) 14:51:57%1.0fでやってみろ
0433428
2006/05/03(水) 14:54:54%Lfだと
d = 1.000000
Ld = 0.000000
なってしまします。
>>432
%1.0fだと
d = 1.000000
Ld = 0
になってしまいます。
0434デフォルトの名無しさん
2006/05/03(水) 14:55:28探索・挿入・削除などの作業時に際して
空き領域に到達するとなぜ失敗ということになるのでしょうか?
あとハッシュ法の意義があまり分からないのです…
0435429
2006/05/03(水) 14:57:03寝ぼけてた
0436デフォルトの名無しさん
2006/05/03(水) 15:14:40(C99)規格ではおそらく%Lf。
但し、それをサポートしてるかどうかは
使ってるコンパイラのマニュアル確認するのが確実。
0437デフォルトの名無しさん
2006/05/03(水) 15:45:22ハッシュ機能の関数は次のよう
hoge HASH(foo,・・・){
//文字列aをアドレスに変換
//対象のメモリのアドレス値を返す
}
だから、アドレスが見つからないと0xCCを返したりして、エラーになる。
ハッシュ法の意義>インデックスみたいなもんだよ。高速検索機能。
0438デフォルトの名無しさん
2006/05/03(水) 15:55:02値渡しor参照渡しされた文字列をアドレスに変換
0439デフォルトの名無しさん
2006/05/03(水) 16:00:310440デフォルトの名無しさん
2006/05/03(水) 16:09:35[昔はハッシュ機能を使ったキャッシュ機能(ハード、CPU)もあったらしいけど、]
頭がHで始まる内容を持ったアドレスを返したって絞り込めている。
これは、いわゆるソートが掛かっている場合だけど、
データ集合にインデックス項目作って、インデックス機能を作ればソートかかって無くてもいける。
0441デフォルトの名無しさん
2006/05/03(水) 16:12:120442デフォルトの名無しさん
2006/05/03(水) 16:13:580443デフォルトの名無しさん
2006/05/03(水) 16:17:39"空き領域"とは何のことを指しているのかがわからなければ答えようが無い。
0444デフォルトの名無しさん
2006/05/03(水) 16:18:47もしかして、変数を初期化しないで使ってないか?
VCあたりで。
0445デフォルトの名無しさん
2006/05/03(水) 16:21:53本人も意味が分かって書いてるのだろうか。
0446デフォルトの名無しさん
2006/05/03(水) 17:14:08一万回ぐらい同じ処理を実行して、平均取ればいいじゃないか。
0447デフォルトの名無しさん
2006/05/03(水) 19:13:56漸化式の次の項ってどうやって表示すれば良いんでしょうか?
前の項と次の項の差を出したいんですが・・・
0448デフォルトの名無しさん
2006/05/03(水) 19:19:01上のほうはVisual C++ 2005 Express Editionで実行できません
なんで?
#include<windows.h>
int WINAPI WinMain(
HINSTANCE hInstance ,
HINSTANCE hPrevInstance ,
PSTR lpCmdLine ,
int nCmdShow ) {
MessageBox(NULL , lpCmdLine , TEXT("Kitty") , MB_ICONINFORMATION);
return 0;
}
0449448
2006/05/03(水) 19:19:50コンパイルしています...
winmain.cpp
c:\documents and settings\裕\my documents\visual studio 2005\projects\win01\win01\winmain.cpp(8) : error C2664: 'MessageBoxW' : 2 番目の引数を 'PSTR' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
ビルドログは "file://c:\Documents and Settings\裕\My Documents\Visual Studio 2005\Projects\win01\win01\Debug\BuildLog.htm" に保存されました。
win01 - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新、0 スキップ ==========
0450デフォルトの名無しさん
2006/05/03(水) 19:23:27このスレで聞きたければ
拡張子を .c にしてやり直しておいで
0451デフォルトの名無しさん
2006/05/03(水) 19:24:21コンパイルオプションとかでUNICODEが定義されてんじゃね?
↓だから、こういうスレ立ててまで世間に警鐘をならしたのに。。。
http://pc8.2ch.net/test/read.cgi/tech/1144387445/l50
0453448
2006/05/03(水) 19:31:15ビルドできますがこう出ます
0454デフォルトの名無しさん
2006/05/03(水) 19:31:17プロジェクトのプロパティでMBSとかUNICODEとかを指定するところない?
0456デフォルトの名無しさん
2006/05/03(水) 19:47:12これってなに?
0457デフォルトの名無しさん
2006/05/03(水) 19:56:280458デフォルトの名無しさん
2006/05/03(水) 20:00:160459デフォルトの名無しさん
2006/05/03(水) 20:01:25例えば11223344みたいな文字列があったとして、"11"で変数に格納"22"で変数に格納、みたいな感じです。
11と22と33と44を個別に変数に格納したいんです。
0460デフォルトの名無しさん
2006/05/03(水) 20:03:130461459
2006/05/03(水) 20:12:12この二つだけを取り出す
. ↓↓
□□□□□□□□
上の図のように取り出すことは不可能ですよね?
0462デフォルトの名無しさん
2006/05/03(水) 20:13:120463デフォルトの名無しさん
2006/05/03(水) 20:14:47デリミタが無いが、いまどきの文字列操作は範囲指定するそうだからいけるだろう。
0464デフォルトの名無しさん
2006/05/03(水) 20:16:26main()
{
static char s[] = "abcdefgh";
char u[3];
strncpy(u, s + 3, 2);
puts(u);
}
0466デフォルトの名無しさん
2006/05/03(水) 20:18:20strncpy(dest,src+ofset,lng)
0467デフォルトの名無しさん
2006/05/03(水) 20:21:34そんくらいやってみろよ、まったく・・・
0468デフォルトの名無しさん
2006/05/03(水) 20:26:55君はCを使わない方が幸せになれる部類のお人だ
0470デフォルトの名無しさん
2006/05/03(水) 20:33:440471デフォルトの名無しさん
2006/05/03(水) 20:35:14そうは言うが、
&s=s=s[0]を理解するのは結構苦労したぞ>自分の場合
アドレス加算は言われてみればそうだけど、最初気付かないのは誰でも通る道じゃないか?
0472デフォルトの名無しさん
2006/05/03(水) 20:37:550473デフォルトの名無しさん
2006/05/03(水) 20:40:22str ~= "nullpo"
0474デフォルトの名無しさん
2006/05/03(水) 20:40:350475デフォルトの名無しさん
2006/05/03(水) 20:41:360476デフォルトの名無しさん
2006/05/03(水) 20:41:550477デフォルトの名無しさん
2006/05/03(水) 20:44:36おねがいします_| ̄|○
x=x+1
のように漸化式を解いていく過程で前の項と後の項との差を出したい
んですがどうやっても差が出ないんですが・・・
低レベルですいません
0478デフォルトの名無しさん
2006/05/03(水) 20:45:28ポインタを理解せずに文字列操作をするのは危険だ。
0479デフォルトの名無しさん
2006/05/03(水) 20:50:59題意がさっぱりわからん。
0480デフォルトの名無しさん
2006/05/03(水) 20:51:37その場合は、1が差じゃないのか?
x = x + nの形だったら n。
0481デフォルトの名無しさん
2006/05/03(水) 20:52:49後ろの項はそのまま代入すればいいだろうが、
前の項を求めるには方程式を解かねばならない。
0482デフォルトの名無しさん
2006/05/03(水) 20:56:29Delphiのプラグインだっけ?www
0483デフォルトの名無しさん
2006/05/03(水) 20:56:41それをプログラムで表示させたいんです。
|x(n+1) - x(n)|
をプログラムで求めたいんです(つд`)
0484デフォルトの名無しさん
2006/05/03(水) 20:57:45x=x+1;
return x-x;
}
0485デフォルトの名無しさん
2006/05/03(水) 20:59:51常にゼロだな。美しいソースだ
0486デフォルトの名無しさん
2006/05/03(水) 21:04:34x2 = x + 1;
printf("%d\n", x2 - x);
x = x2;
あえてやろうとしたらこんな感じか?
0487デフォルトの名無しさん
2006/05/03(水) 21:09:40int* dif(int n){
int ans;
ans = x(n+1) - x(n);
if(ans < 0)
ans = - ans;
return &ans;
}
違った答えが出ることもあるが、
大抵はうまく動くから気にするな。
0488デフォルトの名無しさん
2006/05/03(水) 21:10:01まだまだ苦労が足りないようだな
>&s=s
お前んとこのコンパイラは
if(&s == s) puts("aho");
を黙って通すか? (黙って通す処理系を知っているが)
>s=s[0]
問題外
printf("%d", sizeof s);
printf("%d", sizeof s[0]);
0489デフォルトの名無しさん
2006/05/03(水) 21:10:49main関数だけのしかまだやってないので理解が出来ません…
>>486
0になってしまいました…
0490デフォルトの名無しさん
2006/05/03(水) 21:24:33>ans = x(n+1) - x(n);
のところはどうしたら良いんですか?(゚∀゚)
0491デフォルトの名無しさん
2006/05/03(水) 21:32:040492403
2006/05/03(水) 21:36:210493デフォルトの名無しさん
2006/05/03(水) 21:36:57x(n+1) = 0.5*[x(n)+(s/x(n))], x(1)=3, s = 9.869004
の漸化式の収束点を|x(n+1)-x(n)|<10-5の精度で求めよ。
ってヤツなんですが自分の考え方がおかしかったですか?(^_^;)
0494デフォルトの名無しさん
2006/05/03(水) 21:43:23n<4で問題が発生してるなら、x(n)を整数で扱ってるとか?
0495デフォルトの名無しさん
2006/05/03(水) 21:51:27double x=3;
double dif;
do{
dif = x;
x = 0.5 * (dif + s / dif);
dif -= x;
if(dif < 0) dif = -dif;
}while(dif > 0.00001)
0496デフォルトの名無しさん
2006/05/03(水) 21:54:11前の項を求める必要ないじゃん。
プログラミングで収束値を求める場合は、与えられた漸化式が収束値をもつことと
求められた収束値を計算の誤差も含めて上下から 10^(-5) 抑えられることを書いとくと好感度Upだよ。
きっと。
0497デフォルトの名無しさん
2006/05/03(水) 21:56:360498デフォルトの名無しさん
2006/05/03(水) 22:02:55気持ちはわかるが、それでは課題に答えたことにならないから0点。
0499デフォルトの名無しさん
2006/05/03(水) 22:04:03そうなんですか?!それはすみませんでした(^_^;)
それで、|x(n+1)-x(n)|<10-5になったときに無限ループ
が終わるようにはどうやってすれば良いんでしょうか_| ̄|○
0500デフォルトの名無しさん
2006/05/03(水) 22:11:20>return &ans;
アドレス参照を返してどうしようと?
返すと同時に(関数終わると同時に)消えるよ、この値。
0501デフォルトの名無しさん
2006/05/03(水) 22:15:580502デフォルトの名無しさん
2006/05/03(水) 22:19:03どうしてもやるなら、
int* dif(int n) const{
か
classのメンバ関数にしたほうがいいんじゃないかな。
classの動的オブジェクトはfreeするまで消えないから。
0503デフォルトの名無しさん
2006/05/03(水) 22:20:07しいて言えば、n=Nで収束と判断した場合、x(N)/(10^-5)が52bitに収まる事は示す必要がある。
0504デフォルトの名無しさん
2006/05/03(水) 22:21:05藻前はまず、スレタイを1000回ほど朗読した方がいい
0505デフォルトの名無しさん
2006/05/03(水) 22:21:20おまえうざい
釣りならもっとマシなのやれアフォ
0506デフォルトの名無しさん
2006/05/03(水) 22:24:20このさい、
extern "Cplusplus"
だっていいだろうw
0507デフォルトの名無しさん
2006/05/04(木) 00:08:16無料でできるのでしょうか?
0508デフォルトの名無しさん
2006/05/04(木) 00:12:47マイクロソフトやらボーランドが無料コンパイラを配布してる。
コンソールでいいなら、Cygwinとかも。
ぐぐれば解説は山ほどでてくるんじゃね。
0509デフォルトの名無しさん
2006/05/04(木) 00:12:53Visual C++ 2005 Express Edition 質問箱
http://pc8.2ch.net/test/read.cgi/tech/1140806916/
0510デフォルトの名無しさん
2006/05/04(木) 00:14:06・Windows XP
・無料
上記2点を満たす選択としては
・Borland C++ 5.5.1
・cygwin (オプションで GCC を指定)
あたりが有名どころ
Borland は憶えることが少なく済むがリリース年度が 2000 年と古く C99 未対応
cygwin 上の GCC は全く逆だが、やるなら同じく無料の Fedora か CentOS を使った方がしっくりいく
0511507
2006/05/04(木) 00:20:38即レスありがとうございます!!
0512デフォルトの名無しさん
2006/05/04(木) 00:23:13Windowsプログラミングに当たっては欠けているものが多すぎでスレの勢いは落ちた。
でもCの勉強をする分には十分過ぎる程だよ。
0513403
2006/05/04(木) 00:36:59gcc 3.3.xから4.x当たりを入れて後は書きたいだけソースかけ
糞Winなんてあと3年したら無くなるから勉強するな意味ない
0514デフォルトの名無しさん
2006/05/04(木) 00:38:000515デフォルトの名無しさん
2006/05/04(木) 00:43:15残念ながらたった3年で消えるほど世の中単純ではない。
もちろんWin APIのことだとしてもだ。
0516デフォルトの名無しさん
2006/05/04(木) 00:46:120517デフォルトの名無しさん
2006/05/04(木) 00:59:550518デフォルトの名無しさん
2006/05/04(木) 01:05:45その時は、WINDOWSアプリが消えるときだぜ、すなはちWINDOWSが消えるときだ。
VCにとどまらず、VBでも使ってる。
0519デフォルトの名無しさん
2006/05/04(木) 01:15:18そりゃ.net以前のwinアプリは、全部使ってるがな。
0520デフォルトの名無しさん
2006/05/04(木) 01:22:03.net使ったことないが、あの「COMのマガイ物」みたいなエタイの知れないものがよく分からん。
どうも話によると、VCとVBとJAVAをつなげれるらしいが、要は開発環境選ばないらしい。
あ、もちろんWIN限定で。
0521デフォルトの名無しさん
2006/05/04(木) 03:08:48#define MAKEPOINTS(l) (*((POINTS FAR *)&(l)))
このマクロはlの、
上位ビットをy座標としてPOINTS構造体のyに、
下位ビットをx座標として構造体のxにいれて結果を返すみたいです。
ですがなぜそのようになるかわかりません。
これはどのように見たらいいのでしょう?
0522デフォルトの名無しさん
2006/05/04(木) 03:13:300523デフォルトの名無しさん
2006/05/04(木) 03:17:37ただ単に今触ってたマクロがこれだっただけで・・・
自分が知りたいのは「関数型マクロ」の書き方なのです。
教えてください、お願いします。
0524デフォルトの名無しさん
2006/05/04(木) 07:32:07lは上位バイトにy座標、下位バイトにx座標が入っている4バイトの整数型であることを想定している。
POINTSは2バイトのメンバ変数を2つ(x, y)持ち、上のような整数型の変数をPOINTS *型として読むと、
ちょうどx, y座標にぴったり値が当てはまっている。
そのような操作をマクロにまとめたのが、MAKEPOINTS。
0525デフォルトの名無しさん
2006/05/04(木) 07:32:400526デフォルトの名無しさん
2006/05/04(木) 11:20:00JavaScriptなどのクロージャのようなものがあればよいのですが。
var obj = new Object;
var func = function(){ return obj; }
0527デフォルトの名無しさん
2006/05/04(木) 11:30:29ここであなたが勉強すべきなのはマクロではなくて
キャストの意味です
0528デフォルトの名無しさん
2006/05/04(木) 11:31:11できません
他の言語を使ってください
0529デフォルトの名無しさん
2006/05/04(木) 11:37:24動的に生成することはできないけれど、関数を差し替えることはできる。
#include <stdio.h>
int f1(){ return 1;}
int f2(){ return 2;}
void main(){
int (*f)(void);
f = f1;
printf("%d\n", f()); // 1
f = f2;
printf("%d\n", f()); // 2
}
0530デフォルトの名無しさん
2006/05/04(木) 12:24:09光エレクトロニクス(光素子と仮定し以下参照)
フォトダイオード
フォトトランジスタ
レーザー
発光ダイオード
に関する仕様設定プログラムとかってあります?
光制御プログラミング[Cでの]というイメージなのですが。
プログラミングをどうやるか?じゃなくて存在の有、無と
その例(どのようなに使われているか)が知りたい。
0531デフォルトの名無しさん
2006/05/04(木) 12:35:12「C言語の話かどうか分からない」って頭狂ってるんじゃないのか
0532デフォルトの名無しさん
2006/05/04(木) 13:26:36#include<stdio.h>
#defineyourFile"c:/windows/デスクトップ/新規テキスト文書 (7).txt"
#defineLENGTH_AS_YOU_WISH100
voidmain(void){
intcch=1;
int*ch=&cch;
FILE*fp=fopen(yourFile,"r");
charbuf[LENGTH_AS_YOU_WISH];
fgets(buf,sizeof(buf),fp);
fclose(fp);
for(ch=&cch;*ch;++ch){
printf("%#02x ", *ch);
}
}
0533デフォルトの名無しさん
2006/05/04(木) 13:29:07ニヤ(・∀・)ニヤ
0534デフォルトの名無しさん
2006/05/04(木) 13:31:06ニヤニヤされちゃった(テヘッ;
OSばればれだね
0535デフォルトの名無しさん
2006/05/04(木) 13:38:42失礼しました。
0536デフォルトの名無しさん
2006/05/04(木) 15:39:38void main(void)
0537デフォルトの名無しさん
2006/05/04(木) 15:41:280538デフォルトの名無しさん
2006/05/04(木) 16:07:51そんなに嬉しいか
0539デフォルトの名無しさん
2006/05/04(木) 17:15:17なんでスペース入ってないの?池沼?
0540デフォルトの名無しさん
2006/05/04(木) 17:39:490541デフォルトの名無しさん
2006/05/04(木) 19:31:20void main(void)だったりする・・・ITRONなどはそうなっている。
まあ、main()がなくても動くけどね。
0542デフォルトの名無しさん
2006/05/04(木) 19:38:24なってねえよ馬鹿
0543デフォルトの名無しさん
2006/05/04(木) 21:01:01それでどうこうなるわけでもないし。馬鹿みたい。
こんな細かいことにこだわって本質を見抜けない人が多いよね。
0544デフォルトの名無しさん
2006/05/04(木) 21:19:050545デフォルトの名無しさん
2006/05/04(木) 21:20:250546デフォルトの名無しさん
2006/05/04(木) 21:24:35規格で決まってるのに
どうでもいいって
馬鹿みたい
0547デフォルトの名無しさん
2006/05/04(木) 21:26:310548デフォルトの名無しさん
2006/05/04(木) 21:42:54とりあえず漠然と正常終了で0、エラーで1だか非負を返してるだけ
0549デフォルトの名無しさん
2006/05/04(木) 21:44:19私は、組み込みで、電源投入後からハードの初期設定やらカーネルの初期処理でタスクの生成や起動
やらの部分を作成してます。
mainについてはNORTiというOSではvoid main(void)という仕様になっています。
0550デフォルトの名無しさん
2006/05/04(木) 21:45:050551デフォルトの名無しさん
2006/05/04(木) 21:48:33そんな事は問題では無い。
mainはintという仕様なのだよ。
0552デフォルトの名無しさん
2006/05/04(木) 21:48:42│≡ 〜( ( ( ( 〜)
↓ ≡ ノノノノ ノ
0553デフォルトの名無しさん
2006/05/04(木) 21:56:01こいつ void 並の頭の固さじゃね?
0554デフォルトの名無しさん
2006/05/04(木) 21:57:360555デフォルトの名無しさん
2006/05/04(木) 21:59:55と思ったけどやわらかいのはvoid*か
0556デフォルトの名無しさん
2006/05/04(木) 22:01:39を使えることは最低要件となっているが
その他の型のmain関数を定義できてもいいことになっている
0557デフォルトの名無しさん
2006/05/04(木) 22:21:540558デフォルトの名無しさん
2006/05/04(木) 22:22:04や
char str = "num = 100";
の100を#defineで一括で置き換えするうまい方法ってないでしょうか
要するに数値とその文字列を一つの#defineで置き換えるという。
0559デフォルトの名無しさん
2006/05/04(木) 22:46:440560デフォルトの名無しさん
2006/05/04(木) 22:47:5611.17辺り。
0561デフォルトの名無しさん
2006/05/04(木) 23:01:000562デフォルトの名無しさん
2006/05/04(木) 23:01:45ファームウエアを make から呼んでみろドアホ
0563デフォルトの名無しさん
2006/05/04(木) 23:02:49言わないでやれよ
(・∀・)ニヤニヤしようぜ
0564デフォルトの名無しさん
2006/05/04(木) 23:10:560565デフォルトの名無しさん
2006/05/04(木) 23:29:15反論できないことはよーくわかったよ(プ
0566デフォルトの名無しさん
2006/05/05(金) 00:40:040567初心者
2006/05/05(金) 02:12:54datファイルで
1|xxxxx|yyyyy|zzzzz|nnnnn|mmmm
2|xxxxx|yyyyy|zzzzz|nnnnn|mmmm
:
:
のように書いたものがあるんですが
そのファイルから
1|yyyyy|nnnnn|
:
:
のようなものを作りたいのですが
こういった場合,何をどういう風に使えばいいのでしょう.
教えてください,よろしくお願いします.
0568デフォルトの名無しさん
2006/05/05(金) 02:24:27int i;
for (i=1; i<100; ++i) {
printf("%d|yyyyy|nnnnn|\n", i);
}
0569デフォルトの名無しさん
2006/05/05(金) 02:36:40cut -d '|' -f 2,4
0570デフォルトの名無しさん
2006/05/05(金) 02:49:30cut -d '|' -f 1,3,5
0571デフォルトの名無しさん
2006/05/05(金) 04:49:190572デフォルトの名無しさん
2006/05/05(金) 04:50:400573デフォルトの名無しさん
2006/05/05(金) 08:07:26select yyyyy, nnnnn from dat
0574デフォルトの名無しさん
2006/05/05(金) 10:11:230575初心者
2006/05/05(金) 10:16:27試してやってみます!
その後報告させていただきます。
0576デフォルトの名無しさん
2006/05/05(金) 11:18:400577デフォルトの名無しさん
2006/05/05(金) 12:59:260578デフォルトの名無しさん
2006/05/05(金) 14:10:050579デフォルトの名無しさん
2006/05/05(金) 14:20:35今も昔も静的領域を利用することに変わりはないから要注意であることには変わらないよ。
#勿論スレッドアンセーフだし。
0580デフォルトの名無しさん
2006/05/05(金) 14:25:18最近いろいろな所でstrtok()見かけるようになったから仕様が変わったのかと
思ってたら、変わってなかったのね… (((( ;゜Д゜)))ガクガクブルブル ((((
0581デフォルトの名無しさん
2006/05/05(金) 14:31:440582デフォルトの名無しさん
2006/05/05(金) 15:56:300583デフォルトの名無しさん
2006/05/05(金) 16:06:430584デフォルトの名無しさん
2006/05/05(金) 16:11:220585デフォルトの名無しさん
2006/05/05(金) 16:17:54シェルやawk.perlでは1行ですむが
0586403
2006/05/05(金) 16:25:340587デフォルトの名無しさん
2006/05/05(金) 16:27:58安全にした別の関数を独自に用意してたような。
0588デフォルトの名無しさん
2006/05/05(金) 19:25:09void test(int hoge[]);
と
void test(int *hoge);
は同じ?
0589デフォルトの名無しさん
2006/05/05(金) 19:36:370590デフォルトの名無しさん
2006/05/05(金) 19:41:26int a[2];
1[a]=2;
でもOK
0591デフォルトの名無しさん
2006/05/05(金) 19:42:57それとこれとどういう関係が。
0592デフォルトの名無しさん
2006/05/05(金) 20:00:260593デフォルトの名無しさん
2006/05/05(金) 20:11:210594デフォルトの名無しさん
2006/05/05(金) 20:59:33void test(int hoge[16]);
と
void test(int *hoge);
は同じ?
0595デフォルトの名無しさん
2006/05/05(金) 21:05:13違う
0596デフォルトの名無しさん
2006/05/05(金) 21:06:45同じ。
0597デフォルトの名無しさん
2006/05/05(金) 21:14:360598デフォルトの名無しさん
2006/05/05(金) 21:34:58違う
0599デフォルトの名無しさん
2006/05/05(金) 21:36:03同じ。
0600デフォルトの名無しさん
2006/05/05(金) 21:39:340601594
2006/05/05(金) 21:46:43thx
0602デフォルトの名無しさん
2006/05/05(金) 22:07:56型における [] や * と
式における [] や * は
全く別物だ。
0603デフォルトの名無しさん
2006/05/05(金) 22:17:54Safer C(Secure Cだっけ?)のフライングみたいなヤツでしょ?
0604デフォルトの名無しさん
2006/05/05(金) 22:25:44同じ
0605デフォルトの名無しさん
2006/05/05(金) 23:16:25違うよw
0606デフォルトの名無しさん
2006/05/05(金) 23:51:420607デフォルトの名無しさん
2006/05/06(土) 00:13:030608デフォルトの名無しさん
2006/05/06(土) 05:38:030609デフォルトの名無しさん
2006/05/06(土) 09:38:41勉強し直した方がいいよ。
・関数の仮引数中における最外の[]は*と等価
と言うのと
・a[1] は *(a+1) のシンタックス・シュガーである
と言うのは、全くの別物。
0610デフォルトの名無しさん
2006/05/06(土) 09:56:43Cのうんこな欠点のひとつ
staticとか
0611デフォルトの名無しさん
2006/05/06(土) 12:25:240612デフォルトの名無しさん
2006/05/06(土) 13:36:50無駄にキーワードや演算子が多い方がむしろ良くない。
これは言語設計の1つの指針だ。
それに、>>609 はトークンの意味が変わるという程は
意味は変わってない。違うのは確かだが。
別な文法にした方がむしろ混乱する。
0613デフォルトの名無しさん
2006/05/06(土) 13:50:32シンタックスシュガーじゃないだろ。
0614デフォルトの名無しさん
2006/05/06(土) 14:02:20シンタックスシュガーだよw
a[b] は *(a+b) のシンタックスシュガーだ。
*(a+1) は a[1] とも 1[a] とも書けるからやってみそ。
0615デフォルトの名無しさん
2006/05/06(土) 16:39:420616デフォルトの名無しさん
2006/05/06(土) 16:47:100617デフォルトの名無しさん
2006/05/06(土) 16:52:55K&Rを薦めたい。
ANSIと違うが、たいていのコンパイラは対応しているから気にするな。
GUIは"猫でも"で並行学習だ。
0618デフォルトの名無しさん
2006/05/06(土) 16:58:23構造体を返しても大丈夫ですよね?
0619デフォルトの名無しさん
2006/05/06(土) 16:59:080620デフォルトの名無しさん
2006/05/06(土) 17:00:15GUIってWinのこと?
0621デフォルトの名無しさん
2006/05/06(土) 17:10:220622デフォルトの名無しさん
2006/05/06(土) 17:11:07まあ、それは *(a+b) でも一緒だし。
0623デフォルトの名無しさん
2006/05/06(土) 17:12:03ただ、GUIにはイベントドリブンという壁があるな。
こいつは新言語を習得するのと同じくらいクセモノだ。
0624デフォルトの名無しさん
2006/05/06(土) 17:15:48もしくはJava
0625デフォルトの名無しさん
2006/05/06(土) 17:29:54ここは聞くほうも答えるほうもC以外に傾きやすい
0626デフォルトの名無しさん
2006/05/06(土) 17:38:22「シンッタクスシュガー」の意味わかってんのかよ。
0627デフォルトの名無しさん
2006/05/06(土) 17:43:39効率云々の話は別にして、構造体を返してもOK
0628デフォルトの名無しさん
2006/05/06(土) 17:49:48おれは614じゃないけど
糖衣構文のことだろ、問題ない
0629デフォルトの名無しさん
2006/05/06(土) 18:00:49つーか、自動変数を返すこと自体は全く問題ない。
問題なのは、自動変数のポインタを返すことだ。
間違いやすい点としては、配列を返すことはできないので配列を返す積もりでポインタを返すケースだな。
0630デフォルトの名無しさん
2006/05/06(土) 18:34:20勉強しているので、gotoとか出てきます。
gotoって確か廃止された命令だと風の噂で聞いたんですが、
勉強する必要って有るのですか?
0631デフォルトの名無しさん
2006/05/06(土) 18:37:32使えれば便利なこともある。
でも後藤さんがあまり人気が無いのは確かだ
0632デフォルトの名無しさん
2006/05/06(土) 18:37:530633デフォルトの名無しさん
2006/05/06(土) 18:40:04昔も今も廃止されてはいないが、一般的には非推奨。
gotoを説明している項目以外でgotoを頻繁に使っているのなら、
その本を読むのは考え直すべき。
0634デフォルトの名無しさん
2006/05/06(土) 18:40:26っていうエラーはどう解決したらいい?
ほとんどCを知らない初心者でスマソ
0635デフォルトの名無しさん
2006/05/06(土) 18:41:50もう一回インストールし直す。俺も昔それがあってちょっとあせった
0636デフォルトの名無しさん
2006/05/06(土) 18:44:22#include "stdio.h"
とする。
0637デフォルトの名無しさん
2006/05/06(土) 18:48:340638デフォルトの名無しさん
2006/05/06(土) 18:50:180639デフォルトの名無しさん
2006/05/06(土) 18:51:06コンパイラ
0640デフォルトの名無しさん
2006/05/06(土) 18:54:470641デフォルトの名無しさん
2006/05/06(土) 18:55:221トークンが何文字になっても良いように
char *型の変数にrealloc(1)で領域を拡張しながら
1文字ずつ格納していき、トークンが完成したらファイルに吐いてるんですが、
書き込み用ファイルをオープンするところで異常終了してしまいます。
いろいろ試したところ、トークンが4バイトより大きくなる(例えば abcde とか あいu)
と異常終了するようです。
char *型に1バイトずつ動的割り当てした時の4バイトより後の領域が
一見関係なさそうなファイルオープン時になんらかの影響を与えていると
勘ぐっているんですが、そういう事なのでしょうか?
OS:WindowsXPsp2
コンパイラ:BCC
よろしくお願いします。
0642デフォルトの名無しさん
2006/05/06(土) 18:59:11reallocの引数が足りてませんでした。
realloc(char * c,int length)です。
デバッカで追っている間は、意図したように文字列が
作成さているようです。
0643デフォルトの名無しさん
2006/05/06(土) 19:01:250644デフォルトの名無しさん
2006/05/06(土) 19:01:350645デフォルトの名無しさん
2006/05/06(土) 19:02:410646デフォルトの名無しさん
2006/05/06(土) 19:02:57ソースを見ていないから何とも言えんが、
最初のポインタ変数を、ちゃんと NULL とかで
初期化していないんじゃないのか?
まず realloc の使い方をしっかり調べとけ。
0647デフォルトの名無しさん
2006/05/06(土) 19:06:24お気遣い恐れ入ります。
しかしなんというか、自分で作ってみたいんですよ。
C言語面白くて。
正直、とりあえずゲームは二の次って感じなんです。
>>646
レスありがとう。
初期化はしています。
デバッカでも直前はNULLになっています。
0648デフォルトの名無しさん
2006/05/06(土) 19:07:200649デフォルトの名無しさん
2006/05/06(土) 19:10:51realloc の戻り値ををちゃんと再設定しているか?
0650デフォルトの名無しさん
2006/05/06(土) 19:13:490651デフォルトの名無しさん
2006/05/06(土) 19:16:07使用していませんでした。ごめんなさい。
あなたのレスとC言語辞典をよく見かえしたらなんか理由が分かったような。
ちょっとやってみます。ありがとう。
0652デフォルトの名無しさん
2006/05/06(土) 19:16:42最初はNULLまたは正規の関数で取得したアドレス。
途中は非NULLチェック必須。
0653デフォルトの名無しさん
2006/05/06(土) 19:17:130654デフォルトの名無しさん
2006/05/06(土) 19:22:43どんとこい。
0655デフォルトの名無しさん
2006/05/06(土) 19:25:21ありがとうございます。
HDC hdc;
RECT rc;
char *szStr="hello,world";
switch (msg) {
case WM_PAINT:
GetClientRect(hWnd,&rc);
hdc=BeginPaint(hWnd,&ps);
DrawText(hdc,
(LPCTSTR)szStr,
-1,
&rc,
DT_WORDBREAK);
EndPaint(hWnd,&ps);
hello,worldと表示することを意図して書いてみたのですが、コンパイルしてみると、表示が文字化けしてしまいます。
どうすればちゃんと表示できるでしょうか?
コンパイラはVisual C++2005です。
0656デフォルトの名無しさん
2006/05/06(土) 19:34:17にしてみ。
0657デフォルトの名無しさん
2006/05/06(土) 19:36:58_T識別子が見つかりませんでしたってエラーが出て来ました。そうすればいいのでしょうか?
0658デフォルトの名無しさん
2006/05/06(土) 19:47:19メッセージループ前後を省略しているが、ここ以外におかしいところが有ると思う。
0659デフォルトの名無しさん
2006/05/06(土) 19:50:20とりあえず全部うpしてみました
http://www.uploda.org/uporg382913.c.html
お願いします
0660デフォルトの名無しさん
2006/05/06(土) 19:52:170661デフォルトの名無しさん
2006/05/06(土) 19:54:13ありがとうございます。
出来ました。
お答えいただいたかたがた本当にありがとうございました
0662デフォルトの名無しさん
2006/05/06(土) 20:00:43だからジェネリックテキストなんて使うなって言ってたのに。
0663641
2006/05/06(土) 20:09:50解決しました。
勢いで書いたところを中心にもう一度よぉぉく見返したら
明らかなメモリ破壊コードを書いてました。
くだらないオチで本当にお恥ずかしい。
今回はreallocの使い方が直接の原因ではなかったけれど、
それも十分危険なコードであると知りました。
レス下さった方ごめんなさい。そしてありがとうございました。
0664デフォルトの名無しさん
2006/05/06(土) 20:38:34gotoを勉強する必要があるようなら、先は長いな。
0665デフォルトの名無しさん
2006/05/06(土) 20:47:53使うかどうかは別として
0666デフォルトの名無しさん
2006/05/06(土) 20:50:180667デフォルトの名無しさん
2006/05/06(土) 20:51:330668デフォルトの名無しさん
2006/05/06(土) 20:52:03うちの環境なんとかしてほしい
0669デフォルトの名無しさん
2006/05/06(土) 20:59:46A. ポインタという一種入れ物があって、その中に何かを代入できる
B. ポインタとはメモリに貼り付けるラベルのようなもので、入れ物ではない
今までずっとAが正しいと思っていたのですが、最近になってBかもしれないと思うようになりました。
前者の場合、ポインタの中に何を入れようとも(ポインタが空であろうとも)
ポインタ自身がメモリの中の一定位置に存在することになり、
後者の場合はポインタの指し示すアドレスによってポインタの位置もコロコロ変わる様なイメージです。
B であってますでしょうか?
0670デフォルトの名無しさん
2006/05/06(土) 21:04:33どっちも違うような・・・
>ポインタ自身がメモリの中の一定位置に存在することになり
存在してますよ、
>指し示すアドレスによってポインタの位置もコロコロ変わる
それはないですよ
0671デフォルトの名無しさん
2006/05/06(土) 21:05:57ポインタ変数という一種入れ物があって、
その中にポインタを代入できる
0672デフォルトの名無しさん
2006/05/06(土) 21:12:48という手法は最近一部で流行っている。
0673デフォルトの名無しさん
2006/05/06(土) 21:19:22普通は、C言語を使っているうちにだんだんと慣れていって、実感が湧いてくるもんだよなあ?
0674デフォルトの名無しさん
2006/05/06(土) 21:24:24インラインアセンブラでいいから。
0675デフォルトの名無しさん
2006/05/06(土) 21:27:11たとえば、BASICでもポインタの概念は必須だった。
F-BASIC限定だが、文字列変数名=文字列の先頭アドレス
その他のMS系BASICでも、変数のアドレスを得る関数は有った。
どんな言語でも、データのアドレスという概念無しで
出来ることはたかが知れている。
0676デフォルトの名無しさん
2006/05/06(土) 21:47:22AかBかと聞かれれば俺はAにするな。
0677デフォルトの名無しさん
2006/05/06(土) 21:47:57TEXT("hello, world")
0678デフォルトの名無しさん
2006/05/06(土) 21:52:30どちらでもない。
ポインタとは、プログラム中に使用するオブジェクトを指し示す値の事。
0679デフォルトの名無しさん
2006/05/06(土) 22:04:35メモリダンプとかやってみれば?
0680デフォルトの名無しさん
2006/05/06(土) 22:21:420681デフォルトの名無しさん
2006/05/06(土) 22:26:040682デフォルトの名無しさん
2006/05/06(土) 23:20:27C言語覚えるとどんないいことがありますか。
ハッキングできんの?
0683デフォルトの名無しさん
2006/05/06(土) 23:25:27なわけだが、たいていの実装は
ポインタ == アドレス
0684デフォルトの名無しさん
2006/05/06(土) 23:25:27何も無い
しいて言えば、Cを使いたい時にCが使えるだけ
>>ハッキングできんの?
努力次第(Cに限った事ではない)
0685デフォルトの名無しさん
2006/05/06(土) 23:27:57実装の段階で
ポインタ != アドレス
って、どんな時?
0686デフォルトの名無しさん
2006/05/07(日) 00:00:280687デフォルトの名無しさん
2006/05/07(日) 00:02:05JAVAとかのへんな糞思想入って
ごっちゃになってるだけじゃね?
0688683
2006/05/07(日) 00:28:34でもまぁいいやアホの戯言はスルーしてくれ
0689sage
2006/05/07(日) 00:42:17swith文で、 \ を判定するには、どうすればよいのでしょう?
以下のように書いたのですが、うまくいきません。
switch( *ss ){
case '\\';
...
}
0690デフォルトの名無しさん
2006/05/07(日) 00:43:040691689
2006/05/07(日) 00:45:44すいません。
';'は':'のタイプミスです。
なお、コンパイルしてもエラーは発生していません。
0692デフォルトの名無しさん
2006/05/07(日) 00:53:03それだけ見ても、どう巧くいっていないのか判らない。
もう少しはっきりと判るコードの断片か状況説明をしてくれ。
#まさかbreak;してないって落ちじゃないだろうなぁ。
0693デフォルトの名無しさん
2006/05/07(日) 00:54:01話はそれからだ
0694デフォルトの名無しさん
2006/05/07(日) 00:55:25このカンマの意味何?
0695デフォルトの名無しさん
2006/05/07(日) 00:57:18typedef WCHAR TCHAR;
typedef WCHAR *PTCHAR;
と同じ
0696デフォルトの名無しさん
2006/05/07(日) 00:58:01このカンマと同じ。
0697694
2006/05/07(日) 00:58:250698デフォルトの名無しさん
2006/05/07(日) 01:01:55#include <stdio.h>
main(){
char a = '\\';
switch(a){
case '\\': puts("This is \\.");
}
}
これで
This is \.
と表示される
うまくいかないのは別の部分にあるはず
0699689
2006/05/07(日) 01:05:21コードを以下に載せます。
作っているのはkernel printf関数です。
改行を行いたいのですが、case '\\':の中に入れないようです。
for(sss = s2, ss=format; *ss; ++ss) /* formatの先頭から末尾まで */
{
s_chk = ss;
switch(*s_chk){
// '\\'が使えないのか?
case '\\':
++ss; /* \ だったら、その直後の文字に応じて出力 */
switch( *ss )
{
// 改行
case 'n':
++ss;
putfonts8_asc(binfo->vram, binfo->scrnx, disp_x, disp_y, COL8_FFFFFF, sss);
disp_x = BLANK_LEFT;
disp_y += FONT_HEIGHT;
memset(s2, 0, sizeof(s2));
break;
}
break;
default:
memcpy(s, ss, 1);
++s;
break;
}
}
0700デフォルトの名無しさん
2006/05/07(日) 01:15:39case '\n':
で改行取れるんちゃうん?
'\n'で一文字。
0701689
2006/05/07(日) 01:16:20関数に渡している引数が悪かったです。
'\n'って、'\'と'n'の2文字として扱われるんじゃないんですね。
勉強不足でした。
0702デフォルトの名無しさん
2006/05/07(日) 01:17:45> '\n'って、'\'と'n'の2文字として扱われるんじゃないんですね。
うむ
\nってのはあくまでも改行をソース中に記述するための記号
0703689
2006/05/07(日) 01:23:37関数に渡している引数が悪かったです。
'\n'って、'\'と'n'の2文字として扱われるんじゃないんですね。
勉強不足でした。
0704689
2006/05/07(日) 01:32:53勉強になりました。
2重書き込みしてしまい、すみませんでした。
0705デフォルトの名無しさん
2006/05/07(日) 17:02:52一回の実行で求められるプログラムを作りたいんですがどうしても出来ません。
どなたか馬鹿な私に教えてくださいm(_ _)m
0706デフォルトの名無しさん
2006/05/07(日) 17:22:58ファイルの読み込みってEOFが戻ってきたらファイルの終端ですよね?
OSによって違うのかも知れませんが私の環境では-1と定義してあります。
ファイルのデータの中に-1に該当する値が含まれていたら
while((c = getc(fp)) != EOF)
{
}
みたいなコードって途中で止まっちゃわないでしょうか?
0707デフォルトの名無しさん
2006/05/07(日) 17:31:560708デフォルトの名無しさん
2006/05/07(日) 17:33:29とふと思った。
0709デフォルトの名無しさん
2006/05/07(日) 17:39:042回目は'1'に該当する0x21を返す
俺釣られたんだよね?
0710デフォルトの名無しさん
2006/05/07(日) 17:40:20charは1byteだし
intは最低2byteじゃなかったっけ?
0711デフォルトの名無しさん
2006/05/07(日) 17:40:31なるほどです。ありがとうございます。
0712デフォルトの名無しさん
2006/05/07(日) 17:41:35釣ってるのは君のほう。
0713デフォルトの名無しさん
2006/05/07(日) 17:44:06intは最低16ビット。
で、
sizeof char == 1
sizeof int == 1
CHAR_BIT == 16
なんつー環境があるんだが、こういう場合はどうする?
0714デフォルトの名無しさん
2006/05/07(日) 17:46:120715デフォルトの名無しさん
2006/05/07(日) 17:49:43今家だから確かなことはわからんけど、多分そんなもんないと思う。
で、もしそういう環境でCの標準環境を整えるならどうやるのか疑問に思っただけ。
0716デフォルトの名無しさん
2006/05/07(日) 17:54:22ASCII文字は1byteに収まるわけだし
0717デフォルトの名無しさん
2006/05/07(日) 18:06:55しちゃいけないような気がする。
8ビットアクセスに手間が掛かるとしても、
CHAR_BIT==8にしておくべきなんじゃないか。
0718デフォルトの名無しさん
2006/05/07(日) 18:07:32getc()はASCII文字を返すって決まってるの?
0719デフォルトの名無しさん
2006/05/07(日) 18:12:120720デフォルトの名無しさん
2006/05/07(日) 18:22:49なんか1文字削ってEOFに割り当てるくらいかなぁ
ファイルの途中にEOFにあたるものが使われてたらエラー扱いで。
0721デフォルトの名無しさん
2006/05/07(日) 18:30:31そう考えるとsizeof (int) == sizeof (char)はありえないな。
0722デフォルトの名無しさん
2006/05/07(日) 18:31:07http://www.gen-ta.net/underwater/
0723デフォルトの名無しさん
2006/05/07(日) 18:41:45現に定義はそうなってるし、CHAR_BITが8以上の環境も存在する。
0724デフォルトの名無しさん
2006/05/07(日) 18:45:28たとえば?
CHAR_BITが16の環境ってintが32なんじゃね?
0725デフォルトの名無しさん
2006/05/07(日) 18:45:59標準に準拠したコンパイラ導入すればいいだけでは?
0726デフォルトの名無しさん
2006/05/07(日) 18:50:450727デフォルトの名無しさん
2006/05/07(日) 19:18:14CHAR_BITが8じゃないのはこの際どうでもよくて、
intとcharのサイズが一緒ってどうよって話。
CHAR_BITを出したのは、>>710みたいな突込みがあるから。
>>710は間違ってたけど。
0728デフォルトの名無しさん
2006/05/07(日) 19:19:52EOFはどうなってるの?
0729デフォルトの名無しさん
2006/05/07(日) 19:52:120730デフォルトの名無しさん
2006/05/07(日) 20:03:26>>706
そういうわけで、fgetc()の戻り値はintになっている。
0731デフォルトの名無しさん
2006/05/07(日) 20:15:19どうなるかはらはらしていました。
ありがとうございます。
安心してintを使います。
0732デフォルトの名無しさん
2006/05/07(日) 20:20:060733デフォルトの名無しさん
2006/05/07(日) 20:23:19sizeof(char)=1=8bit
とは限らないと・・・
もういいか
0734デフォルトの名無しさん
2006/05/07(日) 20:24:35みんなそんなことわかってる
0735デフォルトの名無しさん
2006/05/07(日) 20:33:160736デフォルトの名無しさん
2006/05/07(日) 20:50:07#include <iostream.h>
int main()
{
char *p;
int a = 10;
p = (char *)calloc(a, sizeof(char));
cout << "p=" << p << endl;
free(p);
void *vp;
vp = calloc(a, sizeof(char));
cout << "vp=" << vp << endl;
free(vp);
return(0);
}
を実行すると、
p=
vp=009132D8
となり、pの方がうまくいきません。どうしてでしょうか。
0737デフォルトの名無しさん
2006/05/07(日) 20:50:580738デフォルトの名無しさん
2006/05/07(日) 20:51:45マクローリン展開は無限級数だから何か条件が与えられているはず。
課題の一部を省略されると答えようが無いよ。
>>722
マクローリン展開はおまけで、sin()の高速化が主題だから>>705は読み解くのに苦労すると思われ。
0739デフォルトの名無しさん
2006/05/07(日) 20:55:34main()
{
char moji[10]={'a','b','c','d','e','f','g','h','i'};
int i;
printf("%s\n",moji);
for(i=0;i<=9;i++){
printf("[%d]の中身は%s\n",i,moji[i]);
}
}
for文のところで「問題が発生したため、test00.exe を終了します。 ご不便をおかけして申し訳ありません。」
と出ます、なぜでしょう?
winXP HOME BCCです
0740デフォルトの名無しさん
2006/05/07(日) 20:57:580741デフォルトの名無しさん
2006/05/07(日) 20:58:29すべて '\0' でクリアされた領域を指すポインタ p の
内容を表示させたらカラの文字列で正しい結果だ。
つか、iostream.h なんか include してやがる、とか
そもそもそれ C++ じゃん、とかも含めて
うまくいってないのは君の頭の働きが悪い所為。
>>739
書式に "%s" を指定しておきながら moji[i] を渡しているが
結局何がしたいんだ?
0742デフォルトの名無しさん
2006/05/07(日) 21:00:090743デフォルトの名無しさん
2006/05/07(日) 21:01:20%sを%cにすればいいと思うよ。でも僕初心者だからわかりません
0744デフォルトの名無しさん
2006/05/07(日) 21:10:180745デフォルトの名無しさん
2006/05/07(日) 21:10:400746デフォルトの名無しさん
2006/05/07(日) 21:18:27ガッ(AA略)
0747デフォルトの名無しさん
2006/05/07(日) 21:24:16ありがとう
そしたら
[0]の中身はabcdefghi
[1]の中身はbcdefghi
[2]の中身はcdefghi
[3]の中身はdefghi
[4]の中身はefghi
[5]の中身はfghi
[6]の中身はghi
[7]の中身はhi
[8]の中身はi
[9]の中身は
となります、配列一つ一つに格納されるのではないでしょうか?
0748デフォルトの名無しさん
2006/05/07(日) 21:26:420749デフォルトの名無しさん
2006/05/07(日) 21:26:450750デフォルトの名無しさん
2006/05/07(日) 21:27:40printfの変換指定子を%sから%cにしろと言ってるだろ
0751デフォルトの名無しさん
2006/05/07(日) 21:35:17スレ違い
http://pc8.2ch.net/test/read.cgi/tech/1143601166/l50
0752デフォルトの名無しさん
2006/05/07(日) 21:37:52%s、は文字列を返す変換指定子
文字列とはこの場合、moji[i]から次の'\0'の現れる場所まで。
今回はたまたまmoji[9]が'\0'だったようだから、
例えば、i=0、の時にmoji[0]からmoji[9]までを表示する形になった。
もしも、moji[i]だけを表示したいのなら、
は文字を返す変換指定子、%c、を使わないといけない。
と皆様方はおっしゃっているのではないかと、素人ながら思うわけです。
0753デフォルトの名無しさん
2006/05/07(日) 21:39:43素人ナカーマ( ´∀`)/\(´∀` )/
0754デフォルトの名無しさん
2006/05/07(日) 21:45:04for(i=0;i<=9;i++){
printf("[%d]の中身は%c\n",i,&moji[i]);
}
にしました。すみません
[0]の中身は
[1]の中身は・
中略
[9]の中身は・
になります
>>749
それは気をつけました
0755デフォルトの名無しさん
2006/05/07(日) 21:47:33>文字を返す変換指定子
ここの表現に引っかかるものを感じるのであります
"返す"ってどゆ事?
"〜と解釈して変換汁"と指定って事でそ?
0756デフォルトの名無しさん
2006/05/07(日) 21:49:10moji[i]にアンパサンドいらない
0757デフォルトの名無しさん
2006/05/07(日) 21:49:34&moji[i]
ってw
0758デフォルトの名無しさん
2006/05/07(日) 21:49:55じゃ無いの?レス読んで無いからよくわからんけど。
0759デフォルトの名無しさん
2006/05/07(日) 21:50:35お前は工房の俺より出来ないな
0760デフォルトの名無しさん
2006/05/07(日) 21:52:27最初はみんなこんなもん。
0761デフォルトの名無しさん
2006/05/07(日) 21:58:23出来ました!ありがとうございます。
moji[i]でアドレスが渡るんですか?(その様だけど)
0762デフォルトの名無しさん
2006/05/07(日) 21:59:54ちょっと違う。
mojiにmoji[0]のアドレスが格納されている。
moji=moji[0]って漢字かな
0763デフォルトの名無しさん
2006/05/07(日) 22:01:53ちょっと違う
0764デフォルトの名無しさん
2006/05/07(日) 22:02:59のときの moji[9] って C の規格としては未定じゃないの?
0765デフォルトの名無しさん
2006/05/07(日) 22:07:270が入るんじゃね?
0766デフォルトの名無しさん
2006/05/07(日) 22:08:110
0767デフォルトの名無しさん
2006/05/07(日) 22:12:26知らんカッタ。サンクス。
0768デフォルトの名無しさん
2006/05/07(日) 22:16:23だってさ
ちなみに昔の C 言語では構造体や配列をあらかじめ初期化するには、始めの要素からすべて指定して初期化する方法しかありませんでしたが
指示付きの初期化子は初期化時に配列の要素やメンバ名を指定することで、わかりやすく初期化を行えるようにする
例えば、配列の 3 番目の要素を初期化したい時には、 [3] = ..., というように記述します。また構造体や共用体を初期化したい時には、.メンバ名 = ..., のように指定することで初期化を行えます。
0769デフォルトの名無しさん
2006/05/07(日) 22:26:04なんかもっと入門用のお勧め本教えて
0770デフォルトの名無しさん
2006/05/07(日) 22:26:380771デフォルトの名無しさん
2006/05/07(日) 22:29:30はじめてのCでも読んどけ
電車の中だとちょっとアレだがな
0772デフォルトの名無しさん
2006/05/07(日) 22:34:13>>771初めてのCはなんとなく読んだ
とりあえず何度も読んで理解しようと思ふ
0773デフォルトの名無しさん
2006/05/07(日) 22:40:21((a==99 && b==88) || (c==55 && d==44))
にするか、
(a==99 && b==88 || c==55 && d==44)
にするかで、どういった違いが出るんですか?
プログラムの動作上は変わりないですよね? 変わるとしたらコンパイル速度ですか?
0774デフォルトの名無しさん
2006/05/07(日) 22:43:37この本を見ていると、「どうして『ポインタ』が『Cの壁』になんかなるんだろう?」と思ってしまうほど。
0775デフォルトの名無しさん
2006/05/07(日) 22:44:29読みやすさ。
演算子の優先順位は、おぼえるの大変だから、カッコはつけたほうがいい。
(四則演算でもつけたほうがいいって書いてある本もあるくらい)
0776デフォルトの名無しさん
2006/05/07(日) 22:44:33見易さ。
0777デフォルトの名無しさん
2006/05/07(日) 22:44:44一番の違いは見た目。
前者のほうがわかりやすいと言う意見もそれなりにある。
0778デフォルトの名無しさん
2006/05/07(日) 22:44:46ソース読んだ人の理解する速度
0779デフォルトの名無しさん
2006/05/07(日) 23:53:31先頭要素の最初のアドレス &str[0] と等価ですが、添字を指定せずに
アドレス演算子を使った &str はどういう扱いになりますか?
printf でアドレスを表示させてみたところ、同じところを指してましたが、
処理系依存でたまたまなのか、そういうものなのか、分かりませんでした。
0780デフォルトの名無しさん
2006/05/07(日) 23:54:110781デフォルトの名無しさん
2006/05/08(月) 00:19:10同じところを指す
0782デフォルトの名無しさん
2006/05/08(月) 00:19:51わずか40秒のレス、ありがとうございます。そういうものなんですね。
ネットで調べても、配列の場合は & は必要ありません、ばかりで
&を付けた場合の説明を見つけられなかったので…。
0783デフォルトの名無しさん
2006/05/08(月) 00:26:18コンパイラにもよるが意味による最適化は行わないかもしれないから
(a==99 && b==88 || c==55 && d==44) ではなくて評価回数が多いのであれば
(c==55 && d==44 || a==99 && b==88) 括弧とかは演算子の優先順位を保証するためだから
つけたかったら付ければいい
0784デフォルトの名無しさん
2006/05/08(月) 00:26:20781も書いてるけどまったく同じってわけじゃないですよ
0785デフォルトの名無しさん
2006/05/08(月) 00:29:39{
char array[10];
printf("array: %p\n"
"&array: %p\n"
"array + 1: %p\n"
"&array + 1: %p\n",
array, &array, array + 1, &array + 1);
}
0786デフォルトの名無しさん
2006/05/08(月) 00:30:54配列へのポインタが必要な場合は、配列にアンパサンドをつける必要があります。
通常、そういう使い方の説明をする人はいないから配列にアンパサンドをつける必要がないという書き方になるのでしょう。
#要は、>781なので使い道がないわけではない。
0787デフォルトの名無しさん
2006/05/08(月) 00:43:30書き込み前にリロードしてませんでした。すみません。型が違うんですね。
今まで、scanf で &str でもうまく動いてしまっていたので、偶然なのか、
疑問に思ってました。781を読みましてchar*型への代入で試してみましたら
間接参照のレベルが 'char *' と 'char (*__w64 )[256]'で異なっています。
の警告がでました。配列のポインタ(?)になるんですね。
>>785
試してみました。
指しているアドレスは一緒でも、型が違うのでポインタ演算の結果が異なるんですね。
>>786
配列へのポインタとのことで…疑問が解けてすっきりしました。
疑問を晴らすことが出来ました。勉強になりました。ありがとうございました。
0788デフォルトの名無しさん
2006/05/08(月) 01:11:21>指示付きの初期化子は
C99以降、な。
>>775
>演算子の優先順位は、おぼえるの大変だから、カッコはつけたほうがいい。
程度問題。&& と || くらい覚えとけ、って気が個人的にはしなくもない。が、
>(四則演算でもつけたほうがいいって書いてある本もあるくらい)
どこの小学生向けの本だ。
0789デフォルトの名無しさん
2006/05/08(月) 02:30:34演算子の優先順位を覚えていても、
知らない(覚える気のない)人も多いから
括弧を付けた方がいい。
0790デフォルトの名無しさん
2006/05/08(月) 10:38:000791デフォルトの名無しさん
2006/05/08(月) 10:38:360792デフォルトの名無しさん
2006/05/08(月) 11:28:42------------------------------------------------------------
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
〜略〜
TCHAR szPath[MAX_PATH];
GetCurrentDirectory(ARRAYSIZE(szPath) , szPath);
printf("%s\n", szPath);
------------------------------------------------------------
すると、CとかDとかドライブレターしか帰って来ません。VS2005 expressのVC++で
コマンドラインアプリ作ってるんでっすが、これは仕様?それともなんかミスしてますか?
GetModuleFileNameでもドライブレターしか帰ってこない(´Д⊂)
「C:\TEST」が帰ってくるハズなんですが…
「C」しか帰ってこない
どうすればフルパス取得できるかを是非教えてください。
0793デフォルトの名無しさん
2006/05/08(月) 11:39:07機種依存。スレ違い。
このスレ的には、何も教えられる事はない。
>>792
環境依存。スレ違い。
このスレ的には、wprintf 使え。
0794デフォルトの名無しさん
2006/05/08(月) 11:47:310795デフォルトの名無しさん
2006/05/08(月) 12:19:14自分で探せ。
0796デフォルトの名無しさん
2006/05/08(月) 12:24:220797デフォルトの名無しさん
2006/05/08(月) 12:30:17793さんありがとうございました。
Cなんて10年ぶりく位なんで状況の変換に戸惑いまくりです。
*szPathにデータが入ってるのは確認できるのに、なぜ出力できない…って
戸惑っていたんですが、wprintfなんてのがあったんですね
てっきり、printfがunicode拡張されてるもんだと思い込んでおりました。
本当に的確なアドバイスありがとうございました。
0798デフォルトの名無しさん
2006/05/08(月) 13:01:46この場合は wprintf じゃなくて _tprintf を使え。
0799デフォルトの名無しさん
2006/05/08(月) 13:23:07いい加減、スレ違いな質問に答えるのは、
辞めていただけないでしょうか?
質問する方も「何が問題で自分はどうすべきか?」と言う一般常識くらい、
身につけていただきたいものだ…。
0800デフォルトの名無しさん
2006/05/08(月) 13:27:44だったら誘導したりなんなりすればいいだろ
全員がお前みたいにできるわけじゃないんだよ
何が一般常識だよ
0801デフォルトの名無しさん
2006/05/08(月) 13:31:18例えば>>1を読むのは2chでは一般常識だろう。
それでの意味が分からないのなら、そもそもそのスレッドに投稿すべきではないな。
訊くべき場所がわからないなら、最初に汎用の質問スレに書くべきだ。
0802デフォルトの名無しさん
2006/05/08(月) 13:33:49低脳自慢は見苦しいゾ
0803デフォルトの名無しさん
2006/05/08(月) 13:34:22誘導してほしけりゃ誘導スレへ行けばいい。
自分の問題解決能力の欠如を他人のせいにするな。
0804デフォルトの名無しさん
2006/05/08(月) 13:36:59なんでだろ不思議だ
0805デフォルトの名無しさん
2006/05/08(月) 13:40:12世の中にはお前らみたいなできるやつばかりじゃなくて
一般常識もなく低脳で問題解決能力のないやつもいるんだよ
0806デフォルトの名無しさん
2006/05/08(月) 13:48:39798さんアドバイスありがとうございます。
_tprintfなんてのがあるんですね。
少し、調べたんですがいまいち良くわかりません。
_tprintf は tchar.h でマッピングされてるルーチンで
_MBCS とか _UNICODEが定義されている場合に printf か wprintf に
処理を振り分けるような感じで認識してよいのでしょうか?
実は、VS2005 Expressは変な構成なようで
_tsetlocaleがまともに動きません(´Д⊂)
_tprintfは使ってみることにしますが。
なんか_MBCSなプログラムは厳しいかも…
これでは、Windows98では動かんプログラムになっちゃうのかな?
0807デフォルトの名無しさん
2006/05/08(月) 13:55:08スレ違いなんですね。悪かったです。もうきません(´Д⊂)
答えてくれた方々ありがとうございました。
0808デフォルトの名無しさん
NGNG排他的だとなんか問題あるんだろうか?
「あれこれ教えなくても済む人」だけを相手にしていた方が明らかに仕事の効率はいいんだけど。
>>805
>一般常識もなく低脳で問題解決能力のないやつもいるんだよ
そんな奴に優しくしてやる必要なんか無いわけで。
0809デフォルトの名無しさん
2006/05/08(月) 13:58:47レストランに行って「預金をしたい」と言って、
断られるのと何ら変わらない。
「餅が欲しい」と言われて、
「餅の専門店、もしくは餅も売っているスーパーの様な所に行ってください。」
と言っているのと何ら変わらない。
# 検索機能くらい有効に使って欲しいものだ。
0810デフォルトの名無しさん
2006/05/08(月) 14:05:380811デフォルトの名無しさん
2006/05/08(月) 14:15:410812デフォルトの名無しさん
2006/05/08(月) 14:17:050813デフォルトの名無しさん
2006/05/08(月) 14:19:37スレは検索して板は検索しないのか…。
それで「散々検索した」なんて、よく言えたものだ…。
0814デフォルトの名無しさん
2006/05/08(月) 14:31:17C言語のことだからそれらしきスレで検索したつもりだったが
0815デフォルトの名無しさん
2006/05/08(月) 14:51:41あと「あらゆる質問はまずすれ立てるまでもない質問はここでスレにしてください。」って表に書いてあんだろ?
リンク先が終了してるとか、とぼけたことぬかすなよな。
0816デフォルトの名無しさん
2006/05/08(月) 15:01:05Web ブラウザで見てる奴でも
上部にあるスレのリスト右下に
「スレッド一覧はこちら」 というリンクがあるのは
見て判るだろう。
そうやって検索すると複数のそれらしいスレが
見つかるハズだし、それらのスレにどういう違いが
あるのかくらいは疑問に思わないのかと。
0817デフォルトの名無しさん
2006/05/08(月) 15:04:18俺は初心者だと思ってなかったし、C言語のことだろうと思ったからここでいいと思ったんだよ
結局俺は初心者だったんだろうし、これからは然るべきスレで聞いてくるよ
> あと「あらゆる質問はまずすれ立てるまでもない質問はここでスレにしてください。」って表に書いてあんだろ?
専ブラだから気づかなかったんだよ
0818デフォルトの名無しさん
2006/05/08(月) 15:04:590819デフォルトの名無しさん
2006/05/08(月) 15:05:420820デフォルトの名無しさん
2006/05/08(月) 15:06:400821デフォルトの名無しさん
2006/05/08(月) 15:08:24>専ブラだから気づかなかったんだよ
それは無知無能、或いは怠慢だな。
・無知
専ブラにもローカルルールを見る機能はある。
・無能
どこで質問したら言いかと疑問に思った段階でローカルルールに何か書いてないかと疑問に思うべき。
・怠慢
もし疑問に思ったのであれば、それを怠ったのだから怠慢だ。
0822デフォルトの名無しさん
2006/05/08(月) 15:10:54wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
0823デフォルトの名無しさん
2006/05/08(月) 15:15:36それにどこで質問したら言いかと疑問にも思わなかったし(ここでいいと思い込んでいた)
0824デフォルトの名無しさん
2006/05/08(月) 15:17:25そういうのはこっちの知ったこっちゃ無いね
0825デフォルトの名無しさん
2006/05/08(月) 15:19:19で?社会では自分に非があった場合、どうする?
・逆切れする
・逃亡する
・謝罪する
0826デフォルトの名無しさん
2006/05/08(月) 15:20:03おいおい、選択肢が足りなくて>>823が困るだろうがw
・親に泣きつく
0827デフォルトの名無しさん
2006/05/08(月) 15:22:57私は頭が痛いですwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
0828デフォルトの名無しさん
2006/05/08(月) 15:24:16こういう下らないやり取りはNGじゃないのな
0829デフォルトの名無しさん
2006/05/08(月) 15:31:20んじゃあそのすれ立てるまでもない何ちゃらとかいうところで聞いてくるからおまいら煽りに来るんじゃねえぞ
0830デフォルトの名無しさん
2006/05/08(月) 15:37:47気をつけて
0831デフォルトの名無しさん
2006/05/08(月) 17:42:04#include <unistd.h>
char *crypt(const char *key, const char *salt);
この crypt 関数は、使ったあとに、ポインタに対して free しなくてもよいのでしょうか?
0832デフォルトの名無しさん
2006/05/08(月) 17:57:11スレ違い。
非標準関数は該当環境スレへどうぞ。
0833デフォルトの名無しさん
2006/05/08(月) 17:57:22標準Cに crypt() はなかったはずだが?
0834デフォルトの名無しさん
2006/05/08(月) 18:34:460835質問
2006/05/08(月) 19:22:22double pi=0.0;
int i;
for(i=0;i<1000;i++)
pi=pi+1/(2*i+1);
みたいな感じにしたんです。けど、i<1000の判定がイマイチ使えません。
これ以上iを増やす必要がないという判断はどうすればいいのですか?
通常こういった判定はどのようなものを使いますか?
0836デフォルトの名無しさん
2006/05/08(月) 19:22:24標準以外のスレのタイトルとリンクを貼る。
これでおk。
0837デフォルトの名無しさん
2006/05/08(月) 19:23:53変化率が小さくなれば終了。
で、使う公式はそれ固定なの?
0838質問
2006/05/08(月) 19:38:11あと2つほどあります。powはmath.hのアレです。
>>835はライプニッツの公式(>>835はちょっと間違ってました。すみません)
pi=pi+pow(-1.0 , i)/(2*i+1);(ただしこのpiは実際の円周率の4分の1)
マチンの公式
pi=pi+4*pow(-1.0 , i)/(2*i+1)*(pow(1.0/5.0 , 2*i+1)-pow(1.0/239.0 , 2*i+1);(piは実際の円周率の4分の1)
円周率の無限級数
(円周率の2乗)/6=Σ(1/(nの2乗)) (n=1から正の無限まで)
0839デフォルトの名無しさん
2006/05/08(月) 19:42:42pow は使わずとも実装できる。
これ考えるのも宿題の範疇だろうから自分で考えれ。
ライプニッツとマチンと二乗のとで比較すんのかな?
まあ、ガンガレ。
0840デフォルトの名無しさん
2006/05/08(月) 23:00:210841デフォルトの名無しさん
2006/05/08(月) 23:02:21関数 functionの頭文字
0842デフォルトの名無しさん
2006/05/08(月) 23:10:230843デフォルトの名無しさん
2006/05/08(月) 23:23:27あの本は良いよ
技術評論者の回し斧みたいだけど
0844デフォルトの名無しさん
2006/05/08(月) 23:29:550845デフォルトの名無しさん
2006/05/08(月) 23:35:26>fortmat
フォートマット?
0846デフォルトの名無しさん
2006/05/09(火) 00:11:38おなじ学校カナー(゚д゚)
自分は普通にpowつかった
0847デフォルトの名無しさん
2006/05/09(火) 00:17:23一般的には「format」の頭文字と言われているが、
真偽は名付けた人のみが知るところ。
0848デフォルトの名無しさん
2006/05/09(火) 01:20:400849デフォルトの名無しさん
2006/05/09(火) 02:00:18print with format
書式付き出力
0850デフォルトの名無しさん
2006/05/09(火) 02:05:520851デフォルトの名無しさん
2006/05/09(火) 02:18:520852デフォルトの名無しさん
2006/05/09(火) 02:22:41printf - format and print data
printf - print formatted output
printf - display a formatted string
こんなかな?
いずれにしてもprintfのfはformatでしょう
0853デフォルトの名無しさん
2006/05/09(火) 02:27:370854デフォルトの名無しさん
2006/05/09(火) 03:24:430855デフォルトの名無しさん
2006/05/09(火) 03:42:32いまだに印刷という単語を使っているところがまた長寿な感じがするが、
よく考えたら Java もそうだった。
Java よ。オマエは一体どこに印刷しているというのか。
0856デフォルトの名無しさん
2006/05/09(火) 04:04:14プリンターにキーボードがついたやつ
だからdisplayfでなくprintfなんだろうな
0857デフォルトの名無しさん
2006/05/09(火) 04:05:090858デフォルトの名無しさん
2006/05/09(火) 06:10:48スレ違いスマソ
0859デフォルトの名無しさん
2006/05/09(火) 06:18:31PDP-11↓
http://www.tom-yam.or.jp/2238/pdp11.html
0860デフォルトの名無しさん
2006/05/09(火) 06:34:12TTY端末にPRINT、ラインプリンタにLPRINTだね。
0861デフォルトの名無しさん
2006/05/09(火) 06:47:38ネクタイを巻き込まれたら(((( ;゜Д゜))) ガクガクブルブル
0862デフォルトの名無しさん
2006/05/09(火) 09:04:54UNIXはPDP-7
0863デフォルトの名無しさん
2006/05/09(火) 10:33:32でも、そのUnixはCじゃない。アセンブラで書かれたモノだ
0864デフォルトの名無しさん
2006/05/09(火) 11:48:150865デフォルトの名無しさん
2006/05/09(火) 12:54:280866デフォルトの名無しさん
2006/05/09(火) 13:57:27C言語でプログラムを組んでいるのですが、
どうもメモリリークを起こしているようです。
メモリリーク箇所を検出するにあたり何か良い方法
(チェック関数)等はありませんでしょうか?
ハード:SUN
OS:Solaris9
言語:C
です。
0867デフォルトの名無しさん
2006/05/09(火) 14:05:09便利ツール等は環境依存スレ等適切な場所で訊いたほうがいいね。
0868デフォルトの名無しさん
2006/05/09(火) 14:05:47purifyでも使え
http://www.sra.co.jp/Rational/purify/purify.html
# 値段はウン十万だけどな
貧乏ならばメモリ操作関数を自作のメモリ操作と差し替えて
ログ出力して地道に追うしか無いだろうな。
あと、プロファイラでmalloc/freeの回数が一致してなければマズイとか言う方法もあるが
これは更にリークしてる箇所の追跡が厄介
0869デフォルトの名無しさん
2006/05/09(火) 14:09:07自分で malloc() と free() を書けばいいじゃん。
0870デフォルトの名無しさん
2006/05/09(火) 14:12:40マクロかましたほうが、__FILE__や__LINE__出せて便利じゃね?
0871デフォルトの名無しさん
2006/05/09(火) 14:17:24mallocとfreeを別のマクロや関数に置き換えてログをとる方法ですか・・・
すいません、初心者の為よく分からないのですが、
具体的に教えていただけないでしょうか?m(__)m
>>868
プロセス及びグローバル管理をH社のミドルを使用して実現している
ためpurifyは使用できませんでした・・・
ちなみに、malloc及びfreeの回数は一致していたのですが・・・
もしかしてメモリリークではないんですかね・・・
0872デフォルトの名無しさん
2006/05/09(火) 14:21:08よく分からないのにどうやって調べたんだ?
ログ取る malloc/free は、
コンパイラによっては既に用意されていることもある。
ただ、この話は該当コンパイラのスレで聞いた方がいい。
0873デフォルトの名無しさん
2006/05/09(火) 14:22:34そう思った根拠は?
0874デフォルトの名無しさん
2006/05/09(火) 14:26:52まぁ、回数が一致しててもfreeしてはいけない箇所をfreeしている可能性はある
リークよりも確保してないポインタをfreeする方が問題だな
0875デフォルトの名無しさん
2006/05/09(火) 14:28:15チェックツールがあったので、そのツールを使用してチェック
して見ました。
コンパイラのスレですかありがとございます。
>>873
再現率は
2台系のサーバーでここ一週間で2回coreを吐いてプロセスが死にました。
そして、coreをdbxコマンドを使用して解析した結果、提供されているH社
の通信ミドルで使用しているfprintfで落ちているらしく。
2台系とも同じ箇所で死んでます・・・
上記理由からどこかでメモリリークを起こしているのでは?と思ったのですが・・・
0876デフォルトの名無しさん
2006/05/09(火) 14:28:57malloc() のマニュアルページを読め。
MALLOC_CHECK_ の文字列を探せ。
0877デフォルトの名無しさん
2006/05/09(火) 14:33:08メモリリークは不要なのに開放されないメモリ領域が発生することであって、
書いちゃいけないメモリに書き込むことじゃない。
ここで起きてるのは、書いちゃいけないメモリに書き込んでる方な希ガス。
動的配列の境界チェックした方がいいと思う。
0878デフォルトの名無しさん
2006/05/09(火) 14:33:14落ちているソバあたりから追跡するんでねーの?(外部ミドル提供関数の仕様も含めて)
# その結果として、メモリ不足発覚→なんでメモリ不足になるよ?→リークしてるじゃん ならわかるが
0879デフォルトの名無しさん
2006/05/09(火) 14:34:150880デフォルトの名無しさん
2006/05/09(火) 14:34:23#define MALLOC(n) log(__FILE__, __LINE__, "malloc"), malloc(n)
#define FREE(p) log(__FILE__, __LINE__, "free"), free(p)
int log(char *f, int l, char *m);
ポインタの値もチェックするなら
#define MALLOC(n) my_malloc(__FILE__, __LINE__, n)
#define FREE(p) may_free(__FILE__, __LINE__, p)
int log(char *f, int l, char *m, void *p);
void *my_malloc(char *f, int l, size_t s){
void *p = malloc(s);
log(f, l, "malloc", p);
return p;
}
void my_free(char *f, int l, void* p){
log(f, l, "free", p);
free(p):
}
0881デフォルトの名無しさん
2006/05/09(火) 14:36:14変数のサイズチェックということでしょうか?
会社入って1ヶ月なのに・・・わけわからないし・・・
なんかもう仕事やめたくなってきました(涙)
0882デフォルトの名無しさん
2006/05/09(火) 14:36:28スタックトレースみたことあるのか?
0883デフォルトの名無しさん
2006/05/09(火) 14:38:22http://pc8.2ch.net/test/read.cgi/tech/1130044109/119
0884デフォルトの名無しさん
2006/05/09(火) 14:39:41char* p = malloc(32);
p[32] = 0;
みたいな事やってんじゃないのって事。
0885デフォルトの名無しさん
2006/05/09(火) 14:39:47仕事中に2chに質問かよ、とか。
2chにフリーアクセスできるPC系の職場ってどんなだよ、とか。
突っ込みどころは満載なわけだが。
0886デフォルトの名無しさん
2006/05/09(火) 14:42:08上司はお前が理解できていると判断して渡した仕事かもしれん。
このまま、ココで質問しつづけても、不幸になるだけだ(スレ住人 & 上司 & お前)
ここに書いたようなことを、そのまま上司に相談汁。
0887デフォルトの名無しさん
2006/05/09(火) 14:43:41上司に相談してみます・・・
それにしても情けないですね
本当にありがとうございました
0888デフォルトの名無しさん
2006/05/09(火) 14:46:050889デフォルトの名無しさん
2006/05/09(火) 14:50:02環境固有では色々面倒みてくれそうだけど、標準だと char a; free(&a); の動作は未定義?
0890デフォルトの名無しさん
2006/05/09(火) 14:50:50だが、相談する前に何がどうおかしいのかを整理してからな
# fprintfでcoreなんてほぼあり得ないから
# 上位関数でfprintfに変な引数を渡してるんだろうな...変な引数渡しやすい関数だし
0891デフォルトの名無しさん
2006/05/09(火) 14:53:38未定義
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/free.3.html
> free() はポインタ ptr が指すメモリ空間を解放する。
> このポインタは、以前に呼び出された malloc(), calloc(), realloc() のいずれかが返した値でなければならない。
> これ以外のポインタを指定したり、すでに free(ptr) が実行されていたりした場合の動作は定義されていない。
> ptr が NULL の場合には、なんの動作も行われない。
0892デフォルトの名無しさん
2006/05/09(火) 14:59:21二重 free() とか、free() してはいけないポインタを free() に
渡した後の fopen() とか malloc() とかで落ちるという現象は
体験したことある。昔の Sun 純正の C コンパイラのライブラリ
はそんな動作だった。この頃は Linux で gcc + glibc なので
MALLOC_CHECK_ が使えて楽だ。
0893デフォルトの名無しさん
2006/05/09(火) 17:33:26あと無料でできますか
0894デフォルトの名無しさん
2006/05/09(火) 17:36:430895デフォルトの名無しさん
2006/05/09(火) 17:37:40Meで使える無料のコンパイラもあるけどもVisual C++などのコンパイラを使いたければ2000かXPにするべき
0896デフォルトの名無しさん
2006/05/09(火) 17:44:19>>895
とりあえずVisual C++は使わないので・・・
0897デフォルトの名無しさん
2006/05/09(火) 17:45:04そんなときこそBorland
0898デフォルトの名無しさん
2006/05/09(火) 17:46:09http://www.vector.co.jp/soft/winnt/prog/se056631.html?g
0899デフォルトの名無しさん
2006/05/09(火) 17:48:40感謝します
0900デフォルトの名無しさん
2006/05/09(火) 18:50:35そんな悪のツールをつかってはいけません。ソフトウェアを自由に。
http://www.mingw.org/
0901デフォルトの名無しさん
2006/05/09(火) 19:25:41つーかそれ以前に>898はVC1.51ではない、それ用のツールだ。
0902デフォルトの名無しさん
2006/05/09(火) 23:37:350903デフォルトの名無しさん
2006/05/10(水) 01:34:180904デフォルトの名無しさん
2006/05/10(水) 01:36:30全部見てるけど。
0905デフォルトの名無しさん
2006/05/10(水) 01:37:340906デフォルトの名無しさん
2006/05/10(水) 08:23:040907デフォルトの名無しさん
2006/05/10(水) 19:42:56#include <stdio.h>
main()
{
double x,y;
int n1, n2;
x=10.0;
y=204.7*x;
n1=y;
n2=204.7*x;
printf("%d %d\n", n1, n2);
return 0;
}
の出力結果が2047 2046と出力される
Borland C++ 5.5.1 for Win32とgcc version 3.4.4の最適化なしの場合
# 最適化するとコンパイラが計算してしまうので却下
n2が正しい結果を返さないのにn1はyに一回代入しただけなのに正しい結果を返すのは何故だ?
0908デフォルトの名無しさん
2006/05/10(水) 20:12:09いったん64bit doubleへの変換してからintへ変換するのと
80bitから直接intへ変換するのの違いだとおもう。
0909デフォルトの名無しさん
2006/05/10(水) 20:16:39BATのファイル名を書き換えるのがめんどうになってきました
0910デフォルトの名無しさん
2006/05/10(水) 20:20:060911デフォルトの名無しさん
2006/05/10(水) 20:33:240912デフォルトの名無しさん
2006/05/10(水) 20:35:27スレ違いだが、BccDevでググルと幸せになるかもしれないな
俺はmakeファイルの方が好きだがな
batファイルはcygwinを入れたら使う気がなくなる
0913909
2006/05/10(水) 21:17:49BccDevとcygwinを入れられない環境でs。
BATのコマンドを駆使してできないかな。できそーな気がしないけど
0914デフォルトの名無しさん
2006/05/10(水) 21:41:310915デフォルトの名無しさん
2006/05/10(水) 21:56:190916デフォルトの名無しさん
2006/05/10(水) 22:46:45エラー E2209 c:\my documents\プロジェクト\tist\tist.c 3: インクルードファイル 'stduo.h' をオープンできない
となってしまいます
bcc32.cfgとilink32.cfgはC:\borland\bcc55\binに入れてあって間違いはないと思います
0917デフォルトの名無しさん
2006/05/10(水) 22:47:45-L"c:\borland\Bcc55\lib"
もbcc32.cfgに書いたのですが・・
0918デフォルトの名無しさん
2006/05/10(水) 22:59:57ソフトウェアの使い方は該当スレへ。
0919デフォルトの名無しさん
2006/05/10(水) 23:09:420920デフォルトの名無しさん
2006/05/10(水) 23:26:37コマンドライン引数でいいんジャマイカ?
0921デフォルトの名無しさん
2006/05/10(水) 23:53:52いかんのでしょうか?それとも無料でダウンロードできるところがあるんですか?あるなら教えてください
0922デフォルトの名無しさん
2006/05/10(水) 23:55:440923デフォルトの名無しさん
2006/05/11(木) 00:05:420924デフォルトの名無しさん
2006/05/11(木) 00:17:25stdio.h
0925デフォルトの名無しさん
2006/05/11(木) 01:58:25統合開発環境使えばクリック一発
0926デフォルトの名無しさん
2006/05/11(木) 02:04:200927デフォルトの名無しさん
2006/05/11(木) 03:22:49『指定したヒープメモリのブロックを、指定したサイズに変更して再度割当て、
古いメモリブロックにあったデータは可能な限り新しいメモリブロックにコピーされる』
という挙動をするようですが、この『可能な限り』とはどんな状態を指すのでしょう?
例えば、物理メモリを1024MBを積んだマシン上で、
malloc()によって768MB領域確保したポインタに、realloc()によって再度800MBの領域確保をしたとすると、
どのような挙動をするのでしょうか?
上記の例だと、768MB+800MB > 物理メモリ(1024MB) となってしまって、
一時的に物理メモリの容量を超えてしまうのではないかと思うのですが、どうでしょうか?
この場合でも古いメモリブロックにあったデータは新たなメモリブロックにコピーされるのでしょうか?
もし古いメモリブロックが新たなメモリブロックにコピーされるとしたら、
その場合は物理メモリで足りない分のメモリ分だけHDDにスワップが発生するのでしょうか?
メモリ節約のため、realloc()を小まめに呼び出すようなプログラムを書こうかと思っているのですが、
上記の例のようなことが起きるのではないかと危惧しています。
このようなプログラムを書くのはよくないのでしょうか?
0928デフォルトの名無しさん
2006/05/11(木) 03:39:23C言語の仕様では、あなたが考えているような都合のいいそんな概念は無い。
0929デフォルトの名無しさん
2006/05/11(木) 03:50:02800MB にそのまま延長されるだけかもしれないが、
そういう事は期待しない方がいい。
普通はスワップガリガリしつつ新しいメモリ領域から確保するか、
メモリの確保に失敗するかだろう。
こういうメモリの確保の仕方は、普通しない。
必ず連続領域として扱わないといけないなら最大値で一気に確保。
連続領域でなくていいなら、
完全にリストにすると色々無駄だから、
ある程度の長さの配列を要素に持つ連結リストを作る。
0930デフォルトの名無しさん
2006/05/11(木) 04:00:31>928、>929はあーだこーだと言っているが要は環境依存だ。
自分でそのような実験プログラムを作って試してみるといい。
案外最低限のディスクアクセスで済むかも知らん。
#少なくとも>929が書くようなメモリ確保に失敗するほど蛸なOSは少ないだろう。
0931デフォルトの名無しさん
2006/05/11(木) 04:06:34思ったより少ない所でメモリ確保に失敗するね。
MinGW だと問題ない状況でも、失敗する事がある。
0932デフォルトの名無しさん
2006/05/11(木) 04:38:14ふつーのUNIX系OSはulimitとかlimit とかでリソースの限界を変えられる
ようになっている。Cygwinだとどうだか分からないけどこれにも互換性が
ある場合はメモリの限界とかは変更可能かも知れないぞ。
0933デフォルトの名無しさん
2006/05/11(木) 04:49:24MinGW でコンパイルしたものを Cygwin で動かして大丈夫で、
Cygwin GCC でコンパイルしたものを Cygwin で動かして失敗した
2GB 弱メモリを確保したんで、
Cygwin 用にする事による若干のメモリ増が
悪さしたのだと思ってる。
残念ながら limit は関係ないと思う。
0934デフォルトの名無しさん
2006/05/11(木) 06:47:32>メモリ節約のため、realloc()を小まめに呼び出すようなプログラムを書こうかと思っているのですが、
「小さな親切、大きなお世話」の典型例
0935デフォルトの名無しさん
2006/05/11(木) 07:36:53> この『可能な限り』とはどんな状態を指すのでしょう?
サイズ小さくしたら、あふれた分はコピーされないよ
ってことじゃないの?
いずれにせよ、物理メモリとかページングとかは意識しない。
0936デフォルトの名無しさん
2006/05/11(木) 08:20:00そうすりゃ↓この辺の気持ちもなんとなく分かるよ。
> この『可能な限り』とはどんな状態を指すのでしょう?
0937デフォルトの名無しさん
2006/05/11(木) 10:16:30レスありがとうございます。
データ長が可変で、メモリ量を大きめに設定して静的に確保すると、
それこそ1GBぐらい余裕で消費してしまうので、
できれば動的に必要な分だけ確保したかったのですが、
考えが甘かったようです。
リストにすることを考えつつ、何か良い方法がないか頑張ってみます。
皆さんどうもありがとうございました。
0938デフォルトの名無しさん
2006/05/11(木) 10:38:16環境書いてないから判らんが(尤も書いてあったらスレ違いだが)、
malloc()で1GB確保してもその時点ではスワップは発生しないと思うのだが。
必要量が比較的初期の段階で確定するなら、大量に確保→realloc()で不要部を解放、でもいいだろう。
0939超初心中の初心者
2006/05/11(木) 14:44:38はいくら読んでもモヤットしていますけど、分かりやすいような説明が載ってある参考書
とかありましたら、教えてもらえませんか?
よろしくお願いします。
0940デフォルトの名無しさん
2006/05/11(木) 14:45:53Windows ならとりあえずメモ帳でも使っておけば?
その他、フリーで沢山あるので探せばいい。
0941デフォルトの名無しさん
2006/05/11(木) 14:49:433ヶ月いくら読んでもモヤットする奴が読んでも、分かりやすく書いてある参考書ですか?
なかなか条件が厳しいな・・・
とりあえず、なにが分からんのよ?
0942デフォルトの名無しさん
2006/05/11(木) 14:50:52「エディダ」なんてなくても開発は出来ます。
あ、ちなみにエディタはvi(m)だけどな。
0943超初心中の初心者
2006/05/11(木) 14:54:22宣言のところかなぁ?
0944超初心中の初心者
2006/05/11(木) 14:56:29viってUNIXでWinのメモ帳みたいなエディタですよね?
0945デフォルトの名無しさん
2006/05/11(木) 15:04:54メモ帳ごときと一緒されては困るな。
0946超初心中の初心者
2006/05/11(木) 15:10:31私もviの方がいいと思っていますので(^^;;)
0947デフォルトの名無しさん
2006/05/11(木) 15:43:380948デフォルトの名無しさん
2006/05/11(木) 15:54:590949デフォルトの名無しさん
2006/05/11(木) 15:57:220950超初心中の初心者
2006/05/11(木) 15:58:37説明文読んでも、やはり理解できなかった・・・申し訳ないほどバカです・・・;;;
0951デフォルトの名無しさん
2006/05/11(木) 16:04:17だから配列のリストにしろ、と。
0952超初心中の初心者
2006/05/11(木) 16:04:32「共同体」:全体で1つしか値を記憶することができない、同時に別の値を記憶することが出来ない。
つまり、共同体のメンバは、一度に1つだけしか値を記憶できない。
っと、参考書はこう書いた・・・
0953デフォルトの名無しさん
2006/05/11(木) 16:06:04それに、配列や構造体を含んでれば、
複数の値を記憶できる。
0954デフォルトの名無しさん
2006/05/11(木) 16:06:250955超初心中の初心者
2006/05/11(木) 16:08:150956デフォルトの名無しさん
2006/05/11(木) 16:17:190957デフォルトの名無しさん
2006/05/11(木) 16:18:46いや。UNIXでメモ帳みたいなエディタは emacs の方だ。
但し機能は雲泥の差。
0958デフォルトの名無しさん
2006/05/11(木) 16:19:21ホースを使え。
0959超初心中の初心者
2006/05/11(木) 16:21:25ある程度の理解はやはり必要でしょ?^^;;
0960デフォルトの名無しさん
2006/05/11(木) 16:25:530961デフォルトの名無しさん
2006/05/11(木) 16:26:55そうするうちにどうすれば使えるか感じられるようになる。
そうして更に書けば、自ずと理解できているもんだ。
0962デフォルトの名無しさん
2006/05/11(木) 16:31:02emacsは別途インストールしないとダメじゃないか
/binに入っていない事も致命的に非標準
0963デフォルトの名無しさん
2006/05/11(木) 16:39:370964超初心中の初心者
2006/05/11(木) 16:43:080965デフォルトの名無しさん
2006/05/11(木) 17:34:32#include "xxxxx.cpp"とかは書いてないし
0966デフォルトの名無しさん
2006/05/11(木) 17:35:250967デフォルトの名無しさん
2006/05/11(木) 17:45:58> #include "xxxxx.cpp"
これでも出来るよ。激しくお勧めできないけど
多分、コンパイルとリンク違いがわかってないんだろうな
0968デフォルトの名無しさん
2006/05/11(木) 17:58:160969デフォルトの名無しさん
2006/05/11(木) 18:05:550970デフォルトの名無しさん
2006/05/11(木) 18:19:26CやC++はけっこうファイル構造に依存していたりする。staticやexternなんかはそのためのキーワード。
最も依存してるのはJavaで1ファイル1クラスが推奨されている。
0971デフォルトの名無しさん
2006/05/11(木) 18:26:12それはOSやディストリビューションやインストール時の指定によって変わる。
0972デフォルトの名無しさん
2006/05/11(木) 18:26:54Java 使った事あんの?
public クラスの事なら1ファイル1クラスは推奨じゃなく強制。
非 public クラスを作ることは問題ないが、
それを作るかどうかは隠す必要があるかどうかで決めることで、
推奨だの非推奨だのそういう問題じゃない。
0973デフォルトの名無しさん
2006/05/11(木) 18:27:31惜しい。Java は 1 ファイル 1 public クラス、だ。
public でないクラスは同じファイルにいくつあってもいい。
0974デフォルトの名無しさん
2006/05/11(木) 18:58:14ちなみに
http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html
の3章ではpubic classかinterfaceと関係している場合は
privateなclassとinterfaceを同じソースファイルに入れても良い
とかいうニュアンスで書かれてる。
意訳すれば原則1ファイル1クラスと言えなくもない。
0975デフォルトの名無しさん
2006/05/11(木) 19:00:41>>972-973 をもうちょっと良く嫁。
0976デフォルトの名無しさん
2006/05/11(木) 20:03:090977デフォルトの名無しさん
2006/05/11(木) 20:11:03ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windowclasses/windowclassreference/windowclassstructures/wndclassex.asp
載ってないわけがないだろ
0978デフォルトの名無しさん
2006/05/11(木) 20:11:090979デフォルトの名無しさん
2006/05/11(木) 20:24:56質問する前には最低限検索を。
GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は専門の別スレッドがあるのでそこへさようなら。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
前スレ
C言語なら俺に聞け! Part 126
http://pc8.2ch.net/test/read.cgi/tech/1145799128/
↓の人スレ立てお願い
0980デフォルトの名無しさん
2006/05/11(木) 21:43:55#define NOP 0
〜〜〜
NOP;
の様に書いたら、わずかでもCPUの負担になりますか?
(コンパイル時でなく、実行時)
0981デフォルトの名無しさん
2006/05/11(木) 22:06:560; は何の動作もしないので、
おそらく最適化しようがしまいが削られて
全く負担にならない。
全く意味のない処理を入れてみても、
最適化してると削られる事がある。
何か計算して、最終結果をどっかで使わないと。
プログラムの最後に出力するだけでもいい。
0982デフォルトの名無しさん
2006/05/11(木) 22:09:570983デフォルトの名無しさん
2006/05/11(木) 22:10:130984デフォルトの名無しさん
2006/05/11(木) 22:14:33ならない
あなたは何も「要求」を書いていないのだから
0985デフォルトの名無しさん
2006/05/11(木) 22:15:35判りました
どうもありがとうございます
0986デフォルトの名無しさん
2006/05/12(金) 01:22:10あるソフトウェアのソースコードにこんな関数があるんです。C(C++?)です。
char *trimstr(char *s1)
{
while (*s1)
{
if ((*s1 == ' ') || (*s1 == '\t'))
s1++;
else
break;
}
char *s = s1;
s1 = s1+strlen(s1);
while (*--s1)
if ((*s1 != ' ') && (*s1 != '\t'))
break;
s1[1] = 0;
return s;
}
このソフト、Linuxで動かすと、頻繁にセグメンテーションフォルトで落ちてしまいます。
デバッガで原因を調べてみたら、この関数に長さ0の文字列を渡すと起こる*ことがある*ようです。
私はC初心者なんで確認したいんですけど、この関数に長さ0の文字列を渡すと メモリが破壊されますよね?
0987デフォルトの名無しさん
2006/05/12(金) 01:30:13これ書いた奴死ねって感じ?
0988デフォルトの名無しさん
2006/05/12(金) 01:37:080989デフォルトの名無しさん
2006/05/12(金) 01:44:13> if ((*s1 != ' ') && (*s1 != '\t'))
> break;
' ' や '\t' が見つからなければ
文字列の先頭を超えて逆走。
というか、*s1 で何を判定しようとしてるんだ?
s と s1 との比較だろう、ここは。
0990デフォルトの名無しさん
2006/05/12(金) 01:54:010991デフォルトの名無しさん
2006/05/12(金) 03:01:31null文字というのはスペースということなのでしょうか?
例えばHTMLファイルの中にnull文字が含まれる可能性はありますでしょうか?
null文字に付いて詳しく教えていただけたらありがたいです
0992デフォルトの名無しさん
2006/05/12(金) 03:08:100993デフォルトの名無しさん
2006/05/12(金) 03:38:210994デフォルトの名無しさん
2006/05/12(金) 03:49:580995デフォルトの名無しさん
2006/05/12(金) 03:52:53特殊な状況だともうちょい利用されるが。
0996デフォルトの名無しさん
2006/05/12(金) 03:53:49いいえ。
> 例えばHTMLファイルの中にnull文字が含まれる可能性はありますでしょうか?
はい。
0997デフォルトの名無しさん
2006/05/12(金) 03:58:51> > 例えばHTMLファイルの中にnull文字が含まれる可能性はありますでしょうか?
>
> はい。
ホント?
0998デフォルトの名無しさん
2006/05/12(金) 04:03:270999デフォルトの名無しさん
2006/05/12(金) 04:09:04これ使って null バイト攻撃っていうのが可能なことが。
10001000
2006/05/12(金) 04:09:50/  ̄ ̄ ̄ ̄ ̄ ヽ
/ //ノノノ人ヽ ヽ
| / \ヽ |
|| '''''' '''''' :::::::ヽ /
.|(●), 、(●) .::|-、
| ,,ノ(、_, )ヽ、,, .:::::|り| ぬるぬるしている感じだった
.| トェ盆ェイ ..::::::|- '
\. `ニニ´ .::::/
,ィ介ー‐--‐一イ|\
/| | | |ヽヽ/,イ| | | | |ヽ
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。