[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/31 10:23 / Filesize : 243 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.49【環境依存OK】



1 名前:デフォルトの名無しさん [2008/02/20(水) 12:33:41 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.48【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1202141921/
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

845 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 22:59:28 ]
>>842
無理して避けることもないよ。何事も程々が1番。

846 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:02:18 ]
グローバル変数って絶対使わない方がいいんですかねえ
例えばゲームプログラムを作っていて、状態を管理するグローバル変数を使っているとする。
その変数には、ゲームの進行に合わせて、例えば
定数(TITLE=0, STAGE1, STAGE2, STAGE3, STAGE_CLEAR, GAME_OVER, ENDING)が入るとする。
処理は上の状態それぞれでモジュール化されているとすると、
どうしても状態管理変数はグローバル変数化してどの状態からでも
参照・設定できるようにせざるを得ないと思うのですが、何かいい手があるのでしょうか。
状態管理変数をファイル内static変数にしてセッターを使って書き換えるようにしたり、
状態管理変数とセッターをクラスにしてそのオブジェクトのスコープをグローバルにするもしくは状態管理変数とセッターを
staticにしてどのクラスからでも書き換えられるようにするくらいなら最初から状態管理変数をグローバルにしといた方が
シンプルだと思うのですがどうでしょうか。

847 名前:デフォルトの名無しさん [2008/02/26(火) 23:03:57 ]
数が多くなければOK、重要ならOK

848 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:05:38 ]
>>846
静的なシングルトンもグローバル変数も似たようなもんだ
グローバル変数でいいんじゃね?

ただ、関数経由にしておけばデバッグするときに setter で引っ掛ければいいだけだから
ずいぶんと楽になる*かもしれない*

849 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:30:59 ]
>>846
シングルタスクなら良いけど。
GUIでスレッド使って随時処理しながら入力待ちして、
入力はコールバックで処理、みたいのだと、
ゲッタやセッタ作った方が排他処理し易いかなぁ。

まぁケースバイケース?

850 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:32:07 ]
ゲーム状態のインスタンスが1つだけなら、グローバル変数でいいと思う。

インスタンスが複数なら、
状態ごとの処理に、状態管理変数をクラス化したものを渡すとか、
もしくはstateパターンなんてのもいいかもしれない。

851 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:33:35 ]
どうせグローバル変数的に使うとはいえ、
それゆえにどこから変更されてるかを追跡するためにも
>関数経由にしておけばデバッグするときに setter で引っ掛ければいいだけだから
というのは地味に大事


852 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:38:31 ]
ゲーム状態も例えば、プレイヤキャラの他にAIキャラが裏で進行中なんてことになると、
グローバルだと破綻するよね。そんな場合はゲーム状態はキャラクタに依存する情報になるわけだけど。

853 名前:デフォルトの名無しさん mailto:sage [2008/02/26(火) 23:46:14 ]
シングルトンとグローバル変数は違う。
グローバル変数として使ってる間違ってる例が多いのが勘違いの原因かもしれない。

自分だったら>>846の場合、シーンマネージャクラスを作ってそいつに振る舞いを管理させる。
極力グローバル変数は使わない。



854 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:01:10 ]
シングルトンは初期化のタイミングを選べるからグローバルとは大きく違う。

855 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:20:00 ]
結局オブジェクト指向の導入でCにおけるグローバル変数使用の問題は解決できてないんじゃねえの
Cを極めればオブジェクト指向言語を使わなくても良いコードが書けるんじゃねえの結局クラスとか
オブジェクトとかデザインパターンとか複雑で分かりにくくするなだけじゃね

856 名前:デフォルトの名無しさん [2008/02/27(水) 00:21:36 ]
system は空白が改行のように扱われてしまいます
パラメータは渡せませんか?

857 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:22:49 ]
>>855
んなこたーない

858 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:26:23 ]
ファイルの読み込みについての質問です。

 ----
 2008/02/20,01:00:00
 2008/02/21,02:00:00
 2008/02/26,03:00:00
 …
 ----

と書かれたファイルを、

 tmp[0] = 2008;
 tmp[1] = 2;
 tmp[2] = 20;
 tmp[3] = 01;

といったように取り込みたいです。
スラッシュとカンマとコロンを区切りにしてうまく取り込む方法を教えてください。
もし、スラッシュしかなければstrtokとatoiでできたのですが、3種類あるので困っています。
よろしくお願いします。


859 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:28:04 ]
>>856
どんな文字列を渡したとき?

860 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:28:08 ]
見た感じフォーマットは固まってるだろうから
単純に先頭からパースするだけじゃね

861 名前:デフォルトの名無しさん [2008/02/27(水) 00:29:09 ]
string s;

s.substr(0,4);
s.substr(5,2);
s.substr(7,2);
とかでいいのでは?

862 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:31:49 ]
>>858
fscanf(fp, "%d/%d/%d,%d:*[^\n]", &tmp[0], &tmp[1], &tmp[2], &tmp[3]);

863 名前:デフォルトの名無しさん [2008/02/27(水) 00:31:50 ]
>>859
自己解決しました 同名のexeがありそれが動いていたようです



864 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:34:11 ]
862の訂正 *の前に%
fscanf(fp, "%d/%d/%d,%d:%*[^\n]", &tmp[0], &tmp[1], &tmp[2], &tmp[3]);

865 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:34:23 ]
>>855
>Cを極めればオブジェクト指向言語を使わなくても良いコードが書けるんじゃねえの
これは当たり前なんだが、(といってもオブジェクト指向を使わないって意味じゃない、
Cでもオブジェクト指向は昔から存在する)

>結局クラスとかオブジェクトとかデザインパターンとか複雑で分かりにくくするなだけじゃね
何が複雑なんだ?
デザインパターンなんか当たり前の設計パターンに名前付けただけじゃないか。

866 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 00:36:27 ]
変数へのアクセスを制限することで単純になるんだけどなぁ。
無制限に変数にアクセスできたほうが複雑だって、わかんないかなぁ。

867 名前:デフォルトの名無しさん [2008/02/27(水) 00:48:26 ]
Perlの文法が糞なのは間違いない。

868 名前:858 mailto:sage [2008/02/27(水) 01:12:38 ]
>861
レスありがとうございます。
が、、私ではうまいこと使えませんでした。ごめんなさい。。

>860, 864
fscanfでできました。
どうもありがとうございました。

869 名前:デフォルトの名無しさん [2008/02/27(水) 01:23:50 ]
C++で配列のコピーってどうやりますか?
for()文で代入を回す?


870 名前:デフォルトの名無しさん [2008/02/27(水) 01:24:40 ]
memcpyが最速では

871 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:26:15 ]
>866
何を以て「単純」とするかに依るんだろうな。
多分 >855 は言語の構造として単純であること、習得の容易さなどを見て言っているんだろうが
大きなコードを、そのまま扱うと中身はかなり複雑化する。
クラスや名前空間などを使って、大きなコードを小さな部品の集合体として考えて
それぞれの部品単位で扱うことで、ひとつひとつの部分は単純になる。

872 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:26:28 ]
>>869 std::copy()

873 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:27:43 ]
>>870 C++ で memcpy() は使わない。禿との約束だよ。



874 名前:デフォルトの名無しさん [2008/02/27(水) 01:30:02 ]
推奨されていなくても確保の仕方から
vectorでもstringで有効でしょう memcpy

875 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:31:12 ]
memcpyより自分でアセンブラ書いた方がはやかったんだけど、そんなもん?

876 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:31:59 ]
>>875 それはめずらしい。

877 名前:デフォルトの名無しさん [2008/02/27(水) 01:39:54 ]
memcpyより早いコードくれ

878 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 01:40:26 ]
SSE使ったんだけどね

879 名前:デフォルトの名無しさん [2008/02/27(水) 02:17:49 ]
マイクロソフトのCHMファイルはなかなかいいんだけど
SJISしかコンパイルできなくて、サイズが20Mとかになるとコンパイルに失敗する
CHMをパクってWindowsの標準ヘルプ形式を作りたい 
参加者募集中
圧縮接尾辞配列がいいと思う
ブロックーソーティングしたデータはそのまま全文検索できるとおもうがどうか?

880 名前:デフォルトの名無しさん [2008/02/27(水) 02:27:20 ]
複数のテキスト文書を圧縮できてかつ高速に全文検索できて
CHMのような普及率を目指したい
デスクトップサーチとは目的が違う 元のファイルが復元できてまとめられる点が大事

881 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:28:28 ]
tarでいいじゃない

882 名前:デフォルトの名無しさん [2008/02/27(水) 02:33:30 ]
tarは全文検索できるように設計されてるの?

883 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:38:51 ]
tarは圧縮しないからね。



884 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:40:51 ]
>>875
アラインメントに縛りを入れれば早くはできると思う

885 名前:デフォルトの名無しさん [2008/02/27(水) 02:46:44 ]
半分にはならないとだめだな chmは全文検索できて元の半分になるよ

886 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 02:51:09 ]
>>880
専ブラのログをまとめるのに便利そうだ
あてにせず期待してるよ

887 名前:デフォルトの名無しさん [2008/02/27(水) 03:29:32 ]
badc$の巡回データは
adc$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から調べていけば良さそうだが

888 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 03:41:52 ]
std::string
のような STL クラスを前方宣言するにはどうしたらいいですか?
それともこういうクラスって前方宣言しないでヘッダーに直接 include
させても問題ないですか?

889 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 04:17:01 ]
Visual C++ Express Edition を入手したので、簡単なプログラムを作ってみようと思ったのですが、
なぜかコンパイルできません。
コマンドラインで、 cl c:\source.cpp としても、
'cout' : 定義されていない識別子です。
'endl' : 定義されていない識別子です。
等とエラーが返ってきます。
ちなみに、ソースは以下のようなものです。

#include <iostream>

int main(void)
{
cout << "Hellow, World!" << endl;
return 0;
}

なぜエラーになるのか分かりません。お暇な方いましたら、どうかお知恵をお貸しください。

890 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 04:20:39 ]
×cout << "Hellow, World!" << endl;
○std::cout << "Hello World!" << std::endl;


891 名前:デフォルトの名無しさん [2008/02/27(水) 04:21:19 ]
あんたが外国にいるんじゃなかったら、本を買って勉強しる。

とりあえず、
std::cout << "Hellow, World!" << std::endl;
としてやってみ。

もしくは、
using namespace std:
をinclude 文の下に書いておくとか。

まあがんばれ。



892 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 04:24:33 ]
>>890
ありがとうございます。
using namespace std; を追加したらコンパイルできました・・・ ^ ^;
最初、#include <iostream.h> としていて、コンパイル時にそんなファイルは無いと言われ、
#include <iostream> に直したら今度は cout が定義されて無いと言われ・・・
完全に勉強不足ですね・・・・

893 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 04:48:08 ]
>892
環境によっては

#include <iostream.h>

と書くと、using namespace std; を勝手にやってくれるんだわ。
多分、そういう環境を前提にしたコードだったんだろう。



894 名前:デフォルトの名無しさん mailto:sage [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が代入されて無いみたいなのですが、何処がまずいのでしょうか?

895 名前:デフォルトの名無しさん mailto:sage [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は何のために?

以上直すと、こっちでは代入されるよ。

896 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 09:02:30 ]
>>895
ありがとー 出来ました。
コンパイルは出来てましたがNULLが表示されました。
getchar();しないと画面が速攻閉じてしまうので、画面確認用にです。

897 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 09:06:36 ]
>>896
修正したソースを張ってみないと有効な回答は得られないと思うよ。

898 名前:デフォルトの名無しさん [2008/02/27(水) 09:09:57 ]
int* random_array(int n);
shared_ptr<int> p(random_array(100));
というように書けないのですが、shared_ptrの作成時って、必ずnew[100]とかって
やらないとだめなのですか?


899 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 09:30:04 ]
>>898
arrayの共有にはshared_arrayな。
それとエラーメッセージ書かないとエスパーしか解答できない。

900 名前:デフォルトの名無しさん [2008/02/27(水) 11:36:18 ]
system("path %PATH%; C:\\hofe;");
が有効になりません・・・
なぜでしょう

901 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 11:59:17 ]
>>900
環境変数はプロセスごとに別々だから
子プロセスを起動してPATHを設定させても自プロセスには影響しない

902 名前:デフォルトの名無しさん [2008/02/27(水) 12:07:43 ]
改行しても無理でした パスを直うちするか、そこへ移動するしかないですか?
APIでPath設定できるか調べてみます
system("path C:\\hofe; \n abc.exe");

903 名前:デフォルトの名無しさん [2008/02/27(水) 12:20:15 ]
pathを追加する方法教えてください わかりませんでした



904 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 12:24:10 ]
SetEnvironmentVariable

905 名前:デフォルトの名無しさん [2008/02/27(水) 12:30:25 ]
サンクス
長い実行パスと、長いパラメータパスで困ってました
これで解決しそうです

906 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:29:07 ]
#include "stdafx.h"
#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が定義されていないと怒られてしまいます。どうしたら良いのでしょうか?

907 名前:デフォルトの名無しさん [2008/02/27(水) 13:39:20 ]
string x(11,'\0');

sprintf(&x[0], "%02x%02x%02x%02x%02x\n", buf[0], buf[1], buf[2], buf[3], buf[4]);

これは無理?

908 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:51:44 ]
>>907
テラThanks

909 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 13:57:03 ]
まず間違いなく大丈夫ではあるものの一応標準外の仕様だと心にとどめておくといい

910 名前:デフォルトの名無しさん [2008/02/27(水) 14:02:11 ]
winsockを使うときエコーバックするのは普通ですか?
それとも負荷を下げるためにしませんか?
少量ずつデータ受け取ればミスしにくくなると思うんですけど
少しずつ受け取って確認無しでいいですか

911 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 14:02:13 ]
次の改訂で標準になるけど、コンパイラの対応が普及するまで合わせると、
問題ないと言えるのは何年も先かなぁ。

912 名前:デフォルトの名無しさん [2008/02/27(水) 14:09:00 ]
http先のファイルのサイズやcrcを取得する方法教えてください
それみてデータが正常が判定したいです

913 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 14:23:32 ]
>>910
何をどこにエコーバックするんだ
ミスって何のだ

>>912
ファイルサイズは全部受信すればわかるだろう
CRCの計算方法はこれ↓
en.wikipedia.org/wiki/Computation_of_CRC



914 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 14:40:20 ]
>>912
サイズはレスポンスヘッダのContent-Length (ない場合もある)
CRC は無理かと

915 名前:907 mailto:sage [2008/02/27(水) 14:46:39 ]
もう一つ教えて下さい。

char 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[]を読み込んでも"この番号は登録されていません"
と表示されてしまいます。なぜでしょうか?

916 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 14:53:34 ]
std::vectorとCStringでは、empty() (とEmpty()) の意味違うのね〜

しばらく騙されてました。

917 名前:デフォルトの名無しさん [2008/02/27(水) 14:54:36 ]
stlのset使った方がいいんじゃない

918 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:03:58 ]
>>915
strを表示させてみるんだ

919 名前:デフォルトの名無しさん [2008/02/27(水) 15:06:37 ]
>>914
GETでして送られてくるヘッダをみるんですよね?
2chのスレURLいれるとサイズ書いてないです
できる限りなんとか取得する方法無いですか?

920 名前:デフォルトの名無しさん [2008/02/27(水) 15:08:28 ]
送受信のデータです

GET 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

921 名前:デフォルトの名無しさん [2008/02/27(水) 15:12:53 ]
動的に変化するから無理そうですね
通信切れで見られないHMLの取得を避けたいんですけどいい方法ありませんか

922 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:15:27 ]
最後に </html> が無かったら途中で切れたと判断するとか

923 名前:デフォルトの名無しさん [2008/02/27(水) 15:20:51 ]
普通のテキストならどうしたらいいですか?
もともと不完全なHTMLならどうしたらいいですか?
サーバーのファイルと一致していてもエラーになります



924 名前:915 mailto:sage [2008/02/27(水) 15:23:30 ]
>>918
str は 0106719d0 になっているようです><
なんでうまくいかないんだろう。。

925 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:25:54 ]
>>922
HTML4では </html> は省略可能なので万能じゃない

>>920
Connection: close
って書いてあるから接続断まで読めばそれで全部。

あと、なるべくHTTP/1.1使え
手元で確認した限り、HTTP/1.1でアクセスすると
chunked で送ってくるので末尾がちゃんと確認できる

926 名前:920 [2008/02/27(水) 15:28:36 ]
サンクス

927 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:34:26 ]
>>924
sprinf で \n を付けているのに str1, str2 には付いていないぞ

928 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:35:55 ]
HTMLパーサは↓程度はきちんと解析してくれないとねぇ‥‥

46 名前:デフォルトの名無しさん[sage] 投稿日:2008/01/27(日) 00:38:23
これだって正しいでっせ

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "www.w3.org/TR/html4/strict.dtd">
<title>テスト</>
<p><em/ほげほげ/
<p style=width:50px<strong>ふーばー</strong</p>

929 名前:デフォルトの名無しさん [2008/02/27(水) 15:42:57 ]
1.0から1.1にするとバットリクエストのエラーになります
書式が違うんでしょうか_

buf="GET " + path + " HTTP/1.1\r\n\r\n";
n=send(sock, buf.c_str(), buf.size(), 0);

930 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:44:16 ]
1.1はHostヘッダの送信が必須

931 名前:デフォルトの名無しさん [2008/02/27(水) 15:44:52 ]
1.1だと、ユーザー情報も送信しないと無理になるんですか

932 名前:デフォルトの名無しさん [2008/02/27(水) 15:54:08 ]
なおらないです どうすればいいですか?

GET /test/read.cgi/livemarket2/1202634378/ HTTP/1.1
Accept: */*
Referer: 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);

933 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 15:58:54 ]
改行大杉



934 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 16:01:24 ]
2回改行するのは最後だけ

935 名前:915 mailto:sage [2008/02/27(水) 16:02:42 ]
>>927
盲点でした。
やっと次の作業に進めそうです。本当にありがとうございます。

936 名前:デフォルトの名無しさん [2008/02/27(水) 16:06:31 ]
サンクス 改行削って上手くいきました
あと受け取るバッファを多くすると返却値を間違えるようなんです
どうやれば直りますか?
n = recv(sock, &buf[0], 128000, 0);
としてnまで表示するとデータ入ってないときがあります

937 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 17:05:30 ]
めっちゃミジンコの質問させて下さい。
図書館で借りてきた本のページが抜けてて%cはどういう時に使うのか
わかりません;
%はぐぐれないみたいで困ってます。

938 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 17:08:24 ]
>>937
www.linux.or.jp/JM/html/LDP_man-pages/man3/printf.3.html

文字じゃね?

939 名前:937 mailto:sage [2008/02/27(水) 17:16:21 ]
>>938
まだ始めたばかりなのでこのサイトはちょっと厳しいです・・・。

文字ということで本を読みすすめてみます。
有難うございました。

940 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 19:49:40 ]
>>932,936
send も recv も、指定したサイズ未満しか送受信できないことがあるので、
その場合にも対応すること。
あと、エラー処理もちゃんと毎回やること。

941 名前:デフォルトの名無しさん [2008/02/27(水) 20:53:29 ]
HTTPで初めにサイズだけ取得したとして、読む位置をデータの始まりにシークできますか?
初期化からやり直した方がいいですか?
データ位置を自前で判別して方がネットワークの負荷は少なくなりますが

942 名前:デフォルトの名無しさん [2008/02/27(水) 20:55:33 ]
自己解決しました
いったん全部読み込んで、ヘッダとデータを分離してサイズが不一致なら再送にします

943 名前:デフォルトの名無しさん [2008/02/27(水) 20:56:50 ]
すいません。タイトルにふさわしく初歩的な質問ですが、
ポインタはメモリを格納しているアドレスの位置を指す
と言いますが、ではそのポインタの情報はどこに格納
されるのでしょうか?





944 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:01:14 ]
実行時なら、それを格納しているのがポインタ変数。

コンパイル時、&xという記述からどうやってxのアドレスを知るかと言うことなら、
それはコンパイラの仕事、コンパイラが決めること。

945 名前:デフォルトの名無しさん mailto:sage [2008/02/27(水) 21:08:38 ]
つまりint とか char とかと同じような感じでアドレスが入ってる変数があるってだけさ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<243KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef