【初心者歓迎】C/C++室 Ver.49【環境依存OK】
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2008/02/20(水) 12:33:41ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.48【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1202141921/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0871デフォルトの名無しさん
2008/02/27(水) 01:26:15何を以て「単純」とするかに依るんだろうな。
多分 >855 は言語の構造として単純であること、習得の容易さなどを見て言っているんだろうが
大きなコードを、そのまま扱うと中身はかなり複雑化する。
クラスや名前空間などを使って、大きなコードを小さな部品の集合体として考えて
それぞれの部品単位で扱うことで、ひとつひとつの部分は単純になる。
0872デフォルトの名無しさん
2008/02/27(水) 01:26:280873デフォルトの名無しさん
2008/02/27(水) 01:27:430874デフォルトの名無しさん
2008/02/27(水) 01:30:02vectorでもstringで有効でしょう memcpy
0875デフォルトの名無しさん
2008/02/27(水) 01:31:120876デフォルトの名無しさん
2008/02/27(水) 01:31:590877デフォルトの名無しさん
2008/02/27(水) 01:39:540878デフォルトの名無しさん
2008/02/27(水) 01:40:260879デフォルトの名無しさん
2008/02/27(水) 02:17:49SJISしかコンパイルできなくて、サイズが20Mとかになるとコンパイルに失敗する
CHMをパクってWindowsの標準ヘルプ形式を作りたい
参加者募集中
圧縮接尾辞配列がいいと思う
ブロックーソーティングしたデータはそのまま全文検索できるとおもうがどうか?
0880デフォルトの名無しさん
2008/02/27(水) 02:27:20CHMのような普及率を目指したい
デスクトップサーチとは目的が違う 元のファイルが復元できてまとめられる点が大事
0881デフォルトの名無しさん
2008/02/27(水) 02:28:280882デフォルトの名無しさん
2008/02/27(水) 02:33:300883デフォルトの名無しさん
2008/02/27(水) 02:38:510884デフォルトの名無しさん
2008/02/27(水) 02:40:51アラインメントに縛りを入れれば早くはできると思う
0885デフォルトの名無しさん
2008/02/27(水) 02:46:440886デフォルトの名無しさん
2008/02/27(水) 02:51:09専ブラのログをまとめるのに便利そうだ
あてにせず期待してるよ
0887デフォルトの名無しさん
2008/02/27(水) 03:29:32adc$b
dc$ba
c$bad
$badc
ソートすると
$badc
adc$b
badc$
c$bad
dc$ba
ブロックソートではcb$daというデータのみが与えられる
復元しようとするとここまでは直ぐわかる
$***c
a***b
b***$
c***d
d***a
c$、ba、、$b、dc、adと繋がっていることがわかる
たとえばdcというデータは何番目に出現するか求めるとすると末尾のcから調べていけば良さそうだが
0888デフォルトの名無しさん
2008/02/27(水) 03:41:52のような STL クラスを前方宣言するにはどうしたらいいですか?
それともこういうクラスって前方宣言しないでヘッダーに直接 include
させても問題ないですか?
0889デフォルトの名無しさん
2008/02/27(水) 04:17:01なぜかコンパイルできません。
コマンドラインで、 cl c:\source.cpp としても、
'cout' : 定義されていない識別子です。
'endl' : 定義されていない識別子です。
等とエラーが返ってきます。
ちなみに、ソースは以下のようなものです。
#include <iostream>
int main(void)
{
cout << "Hellow, World!" << endl;
return 0;
}
なぜエラーになるのか分かりません。お暇な方いましたら、どうかお知恵をお貸しください。
0890デフォルトの名無しさん
2008/02/27(水) 04:20:39○std::cout << "Hello World!" << std::endl;
0891デフォルトの名無しさん
2008/02/27(水) 04:21:19とりあえず、
std::cout << "Hellow, World!" << std::endl;
としてやってみ。
もしくは、
using namespace std:
をinclude 文の下に書いておくとか。
まあがんばれ。
0892デフォルトの名無しさん
2008/02/27(水) 04:24:33ありがとうございます。
using namespace std; を追加したらコンパイルできました・・・ ^ ^;
最初、#include <iostream.h> としていて、コンパイル時にそんなファイルは無いと言われ、
#include <iostream> に直したら今度は cout が定義されて無いと言われ・・・
完全に勉強不足ですね・・・・
0893デフォルトの名無しさん
2008/02/27(水) 04:48:08環境によっては
#include <iostream.h>
と書くと、using namespace std; を勝手にやってくれるんだわ。
多分、そういう環境を前提にしたコードだったんだろう。
0894デフォルトの名無しさん
2008/02/27(水) 08:20:07#include <string.h>
#include <stdio.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
string a = "0908a89";
printf("%s\n", a);
getchar();
return 0;
}
aに0908a89が代入されて無いみたいなのですが、何処がまずいのでしょうか?
0895デフォルトの名無しさん
2008/02/27(水) 08:37:47というか、それVCならコンパイルとおるの?gcc 2.96だと少なくとも通らない。
・string.hってCの奴じゃないかな。#include <string>と書くべし
・その場合aってのはstring型なので、printfに%sで受けるのはよろしくない。
書くならprintf("%s\n",a.c_str());
・でも、せっかく#include <iostream>してるんだから
cout << a << endl;でいいじゃん。
・ところで最後のgetcharは何のために?
以上直すと、こっちでは代入されるよ。
0896デフォルトの名無しさん
2008/02/27(水) 09:02:30ありがとー 出来ました。
コンパイルは出来てましたがNULLが表示されました。
getchar();しないと画面が速攻閉じてしまうので、画面確認用にです。
0897デフォルトの名無しさん
2008/02/27(水) 09:06:36修正したソースを張ってみないと有効な回答は得られないと思うよ。
0898デフォルトの名無しさん
2008/02/27(水) 09:09:57shared_ptr<int> p(random_array(100));
というように書けないのですが、shared_ptrの作成時って、必ずnew[100]とかって
やらないとだめなのですか?
0899デフォルトの名無しさん
2008/02/27(水) 09:30:04arrayの共有にはshared_arrayな。
それとエラーメッセージ書かないとエスパーしか解答できない。
0900デフォルトの名無しさん
2008/02/27(水) 11:36:18が有効になりません・・・
なぜでしょう
0901デフォルトの名無しさん
2008/02/27(水) 11:59:17環境変数はプロセスごとに別々だから
子プロセスを起動してPATHを設定させても自プロセスには影響しない
0902デフォルトの名無しさん
2008/02/27(水) 12:07:43APIでPath設定できるか調べてみます
system("path C:\\hofe; \n abc.exe");
0903デフォルトの名無しさん
2008/02/27(水) 12:20:150904デフォルトの名無しさん
2008/02/27(水) 12:24:100905デフォルトの名無しさん
2008/02/27(水) 12:30:25長い実行パスと、長いパラメータパスで困ってました
これで解決しそうです
0906デフォルトの名無しさん
2008/02/27(水) 13:29:07#include <string>
#include <stdio.h>
#include <iostream>
using namespace std;
略)
string x;
sprintf(x, "%02x%02x%02x%02x%02x\n", buf[0], buf[1], buf[2], buf[3], buf[4]);
これで、buf[0], buf[1], buf[2], buf[3], buf[4]の値をstring型 でx代入したいんですけど
xが定義されていないと怒られてしまいます。どうしたら良いのでしょうか?
0907デフォルトの名無しさん
2008/02/27(水) 13:39:20sprintf(&x[0], "%02x%02x%02x%02x%02x\n", buf[0], buf[1], buf[2], buf[3], buf[4]);
これは無理?
0908デフォルトの名無しさん
2008/02/27(水) 13:51:44テラThanks
0909デフォルトの名無しさん
2008/02/27(水) 13:57:030910デフォルトの名無しさん
2008/02/27(水) 14:02:11それとも負荷を下げるためにしませんか?
少量ずつデータ受け取ればミスしにくくなると思うんですけど
少しずつ受け取って確認無しでいいですか
0911デフォルトの名無しさん
2008/02/27(水) 14:02:13問題ないと言えるのは何年も先かなぁ。
0912デフォルトの名無しさん
2008/02/27(水) 14:09:00それみてデータが正常が判定したいです
0913デフォルトの名無しさん
2008/02/27(水) 14:23:32何をどこにエコーバックするんだ
ミスって何のだ
>>912
ファイルサイズは全部受信すればわかるだろう
CRCの計算方法はこれ↓
http://en.wikipedia.org/wiki/Computation_of_CRC
0914デフォルトの名無しさん
2008/02/27(水) 14:40:20サイズはレスポンスヘッダのContent-Length (ない場合もある)
CRC は無理かと
0915907
2008/02/27(水) 14:46:39char str[100];
sprintf(str, "%02x%02x%02x%02x%02x\n", buf[0], buf[1], buf[2], buf[3], buf[4]);
char str0[100];
char str1[] = "01061719d0";
char str2[] = "0106171f34";
if (strcmp(str, str1) == 0){
printf("この番号は登録されています�@\n番号%s\n",str);
}
else if (strcmp(str, str2) == 0){
printf("この番号は登録されています�A\n番号%s\n",str);
}
else {
printf("この番号は登録されていません\n番号%s\n",str);
}
このようなif文にしたいのですが、登録したbuf[]を読み込んでも"この番号は登録されていません"
と表示されてしまいます。なぜでしょうか?
0916デフォルトの名無しさん
2008/02/27(水) 14:53:34しばらく騙されてました。
0917デフォルトの名無しさん
2008/02/27(水) 14:54:360918デフォルトの名無しさん
2008/02/27(水) 15:03:58strを表示させてみるんだ
0919デフォルトの名無しさん
2008/02/27(水) 15:06:37GETでして送られてくるヘッダをみるんですよね?
2chのスレURLいれるとサイズ書いてないです
できる限りなんとか取得する方法無いですか?
0920デフォルトの名無しさん
2008/02/27(水) 15:08:28GET http://live27.2ch.net/test/read.cgi/livemarket2/1202634378/ HTTP/1.0
HTTP/1.1 200 OK
Date: Wed, 27 Feb 2008 06:07:25 GMT
Server: Apache/2.0.59 (Unix) PHP/4.4.2 mod_ssl/2.0.59 OpenSSL/0.9.7e-p1
Vary: Accept-Encoding
Connection: close
Content-Type: text/html
0921デフォルトの名無しさん
2008/02/27(水) 15:12:53通信切れで見られないHMLの取得を避けたいんですけどいい方法ありませんか
0922デフォルトの名無しさん
2008/02/27(水) 15:15:270923デフォルトの名無しさん
2008/02/27(水) 15:20:51もともと不完全なHTMLならどうしたらいいですか?
サーバーのファイルと一致していてもエラーになります
0925デフォルトの名無しさん
2008/02/27(水) 15:25:54HTML4では </html> は省略可能なので万能じゃない
>>920
Connection: close
って書いてあるから接続断まで読めばそれで全部。
あと、なるべくHTTP/1.1使え
手元で確認した限り、HTTP/1.1でアクセスすると
chunked で送ってくるので末尾がちゃんと確認できる
0926920
2008/02/27(水) 15:28:360927デフォルトの名無しさん
2008/02/27(水) 15:34:26sprinf で \n を付けているのに str1, str2 には付いていないぞ
0928デフォルトの名無しさん
2008/02/27(水) 15:35:5546 名前:デフォルトの名無しさん[sage] 投稿日:2008/01/27(日) 00:38:23
これだって正しいでっせ
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<title>テスト</>
<p><em/ほげほげ/
<p style=width:50px<strong>ふーばー</strong</p>
0929デフォルトの名無しさん
2008/02/27(水) 15:42:57書式が違うんでしょうか_
buf="GET " + path + " HTTP/1.1\r\n\r\n";
n=send(sock, buf.c_str(), buf.size(), 0);
0930デフォルトの名無しさん
2008/02/27(水) 15:44:160931デフォルトの名無しさん
2008/02/27(水) 15:44:520932デフォルトの名無しさん
2008/02/27(水) 15:54:08GET /test/read.cgi/livemarket2/1202634378/ HTTP/1.1
Accept: */*
Referer: http://live27.2ch.net/
Accept-Language: ja
Host: live27.2ch.net
Connection: Keep-Alive
HTTP/1.1 400 Bad Request
ソース
buf="GET " + ko+ " HTTP/1.1\r\n\r\n";
cout<<buf; n=send(sock, buf.c_str(), buf.size(), 0);
buf="Accept: */*\r\n\r\n";
cout<<buf; n=send(sock, buf.c_str(), buf.size(), 0);
buf="Referer: http://"+sev+"/"+"\r\n\r\n";;
cout<<buf; n=send(sock, buf.c_str(), buf.size(), 0);
buf="Accept-Language: ja\r\n\r\n";
cout<<buf; n=send(sock, buf.c_str(), buf.size(), 0);
buf="Host: "+sev+"\r\n\r\n";
cout<<buf; n=send(sock, buf.c_str(), buf.size(), 0);
buf="Connection: Keep-Alive\r\n\r\n";
cout<<buf; n=send(sock, buf.c_str(), buf.size(), 0);
0933デフォルトの名無しさん
2008/02/27(水) 15:58:540934デフォルトの名無しさん
2008/02/27(水) 16:01:240936デフォルトの名無しさん
2008/02/27(水) 16:06:31あと受け取るバッファを多くすると返却値を間違えるようなんです
どうやれば直りますか?
n = recv(sock, &buf[0], 128000, 0);
としてnまで表示するとデータ入ってないときがあります
0937デフォルトの名無しさん
2008/02/27(水) 17:05:30図書館で借りてきた本のページが抜けてて%cはどういう時に使うのか
わかりません;
%はぐぐれないみたいで困ってます。
0938デフォルトの名無しさん
2008/02/27(水) 17:08:24http://www.linux.or.jp/JM/html/LDP_man-pages/man3/printf.3.html
文字じゃね?
0940デフォルトの名無しさん
2008/02/27(水) 19:49:40send も recv も、指定したサイズ未満しか送受信できないことがあるので、
その場合にも対応すること。
あと、エラー処理もちゃんと毎回やること。
0941デフォルトの名無しさん
2008/02/27(水) 20:53:29初期化からやり直した方がいいですか?
データ位置を自前で判別して方がネットワークの負荷は少なくなりますが
0942デフォルトの名無しさん
2008/02/27(水) 20:55:33いったん全部読み込んで、ヘッダとデータを分離してサイズが不一致なら再送にします
0943デフォルトの名無しさん
2008/02/27(水) 20:56:50ポインタはメモリを格納しているアドレスの位置を指す
と言いますが、ではそのポインタの情報はどこに格納
されるのでしょうか?
0944デフォルトの名無しさん
2008/02/27(水) 21:01:14コンパイル時、&xという記述からどうやってxのアドレスを知るかと言うことなら、
それはコンパイラの仕事、コンパイラが決めること。
0945デフォルトの名無しさん
2008/02/27(水) 21:08:380946デフォルトの名無しさん
2008/02/27(水) 21:09:38(入ってるのアドレスだけじゃないですね)
0947デフォルトの名無しさん
2008/02/27(水) 21:11:45メンバポインタとかは別だが。
0948デフォルトの名無しさん
2008/02/27(水) 21:12:50xとyのデータを一致するようにできますか コピーではなくて
0949デフォルトの名無しさん
2008/02/27(水) 21:14:24&a=&b;のような事はできないですよね?
0950デフォルトの名無しさん
2008/02/27(水) 21:14:35という話ではなくて?
0951デフォルトの名無しさん
2008/02/27(水) 21:16:08参照にするしかないな。
string y = "*****", &x = y;
0952デフォルトの名無しさん
2008/02/27(水) 21:16:480953デフォルトの名無しさん
2008/02/27(水) 21:18:110954デフォルトの名無しさん
2008/02/27(水) 21:19:46アドレス演算子の結果は右辺値だと思った。
0955デフォルトの名無しさん
2008/02/27(水) 21:21:38int *ap = &a;
int *bp = &b;
ap = bp;
0956デフォルトの名無しさん
2008/02/27(水) 21:25:39何でそう言う事がしたいの?
0957デフォルトの名無しさん
2008/02/27(水) 21:36:280958デフォルトの名無しさん
2008/02/27(水) 21:38:060959デフォルトの名無しさん
2008/02/27(水) 21:40:37string x,y="...";
#define x y
0960デフォルトの名無しさん
2008/02/27(水) 21:43:17とした場合、最適化で x と y が同一視される可能性はあるんじゃないかな。
0961デフォルトの名無しさん
2008/02/27(水) 21:47:24変数のアドレスは、変数が確保されたときに固定されるものだろ。
「すでに確保された変数のアドレスを書き換えるテク」を期待する目的がわからん。
0962デフォルトの名無しさん
2008/02/27(水) 21:50:290963デフォルトの名無しさん
2008/02/27(水) 22:22:39class CSample
{
public:
void get( CSample2 *obj_s2 ){obj_s2 = &m_obj_s2
private:
CSample2 m_obj_s2;
};
main{
CSample1 obj_s1;
CSample2 *obj_s2 =NULL;
obj_s1.get( obj_s2 );
}
これでmain内のobj_s2がobj_s1.m_obj_s2と同じ物を指すようにしたかったのですが、NULLを指したままかわりません。
参照戻しではできたのですが、これで出来ない理由がわからず気持ち悪いです。
どなたか原因のご教授お願いします。
0964デフォルトの名無しさん
2008/02/27(水) 22:23:37vector<bool (*func)(int)> EroeroFunction;
↑<>の中のカッコが悪戯してうまくコンパイルが通らなくて困ってます。
構造体に関数ポインタを入れればなんとかなるんですが、メンバが1つしかないのでなんとも。
0965デフォルトの名無しさん
2008/02/27(水) 22:27:29どっちかつかえ。
< void get( CSample2 *obj_s2 ){obj_s2 = &m_obj_s2
> void get( CSample2 *&obj_s2 ){obj_s2 = &m_obj_s2;}
> void get( CSample2 **obj_s2 ){*obj_s2 = &m_obj_s2;
}
0966デフォルトの名無しさん
2008/02/27(水) 22:27:58get関数内でobj_s2を書き換えても、呼び出し側のobj_s2は書き換わらない。
関数に引数を渡す際の基本だろ?
ポインタを書き換えたいなら、ポインタをアドレス渡しでもすればいい。
void get( CSample2** ppobj_s2 ) { *ppobj_s2 = &m_obj_s2; }
obj_s1.get( &obj_s2 );
0967デフォルトの名無しさん
2008/02/27(水) 22:29:45vector<bool (*)(int)> じゃないの?
0968デフォルトの名無しさん
2008/02/27(水) 22:33:46そういう関数ありますか
0969デフォルトの名無しさん
2008/02/27(水) 22:34:45言ってる意味が分からない。
0970デフォルトの名無しさん
2008/02/27(水) 22:35:22レス数が950を超えています。1000を超えると書き込みができなくなります。