08/02/25 18:39:19
stringと書いてあるだろうがアホ
717:デフォルトの名無しさん
08/02/25 18:43:10
>>716
>>714はC++でもNGだろ。C文字列同士だぞ。
718:デフォルトの名無しさん
08/02/25 18:45:36
そこは中身がそうなっているstringインスタンスだと解釈してやろうぜ。
719:デフォルトの名無しさん
08/02/25 18:48:48
質問者はそういう中身のstringを造ろうとしてそこでつまりそうだが
720:デフォルトの名無しさん
08/02/25 19:21:16
>>718
アイアイ
721:デフォルトの名無しさん
08/02/25 19:30:23
std::auto_ptrって、ブロックを出ると自動的に開放されるポインタですよね?
これって、AUTO変数と比べてより便利な点ってあるのでしょうか?
722:デフォルトの名無しさん
08/02/25 19:36:53
×ブロックを出ると自動的に開放
○std::auto_ptrが破棄されたときインスタンスも自動的に開放
723:デフォルトの名無しさん
08/02/25 19:37:01
>>721
・スタックに置くには適さない巨大なデータも置ける
・最初はNULLにしておいて必要になってからnewできる
・ブロックを出るまで待たなくても好きなタイミングで削除できる
・releaseで手放せばブロックを出ても削除しないことも出来る
724:デフォルトの名無しさん
08/02/25 19:39:10
関数の戻り値にも使えるはず。
725:デフォルトの名無しさん
08/02/25 19:41:51
using namespace std;
string func1() {
string s = "Hello";
return s;
}
void func2(string s) {
cout << s << endl;
}
int main() {
func2(func1());
}
この渡し方って解放されなかったり破壊されたりしますか?
処理系によりけりですか?
726:デフォルトの名無しさん
08/02/25 19:43:39
>>725
しません。
どの処理系でも平気。
727:デフォルトの名無しさん
08/02/25 19:59:12
>>722-724
ありがとうです。
ところで、testは適当なクラスとして、
int main()
{
std::auto_ptr<test> tp(new test);
tp.release();
return 0;
}
とすると、メモリリークが検出されてしまうのですが、tp.release()をしないようにすると
大丈夫でした。これってrelease()の使い方が間違ってますか?
あと、最初にauto_ptr<test>だけ宣言しておいて、途中でnew testする方法もわかりません。
もうちょっとだけ教えてくださいな。
728:デフォルトの名無しさん
08/02/25 20:05:08
releaseは、以後、自分でメモリ管理するからauto_ptrはdeleteするなというもの。
729:デフォルトの名無しさん
08/02/25 20:14:08
>>728
最初は、
std::auto_ptr<test> tp(new test);
tp.release();
test* tp2 = tp.get();
delete tp2;
としていたのですが、以下のようにしなければならないということですね。
std::auto_ptr<test> tp(new test);
delete tp.release();
ありがとうございました。
730:デフォルトの名無しさん
08/02/25 20:27:13
>>729
tp.reset();
731:デフォルトの名無しさん
08/02/25 20:44:23
resetはVC6のauto_ptrには無いとか言い出すぜきっと。
732:デフォルトの名無しさん
08/02/25 20:52:38
resetもしないでデストラクタに任せればいい場面にまで
729のようなことをしていないか不安。
733:デフォルトの名無しさん
08/02/25 20:58:49
設計について色々調べていると(デザインパターン等々)これ無駄じゃね?みたいな部分に多々遭遇します
例えばコンストラクタとデストラクタで確保&解放を行う為に全体をそれに合わせたり
それの為にメソッドやクラスを用意したり等々
確かに見通しもよくなりますし、わかりやすくなるとは思うのですが、
それらを犠牲にすれば短く出来たりオーバーヘッドを減らせたり出来るんじゃないか?と考えてしまいます
つまりコード全体の見易さ、転じてメンテナンスが容易になるなどのメリットと
速度を犠牲にするというデメリットがあると思います
とはいえ後者は今時気にするほどでもなく、詳しくないのですがここを気にするのは組み込み系と呼ばれる分野くらいなのかなとも思います
実際はやはり見易さ等を気にした手法(なんていうんだろう?)を用いて設計を行うべきなんでしょうか?
うまく表現できなく、長くなってしまってすみません
734:デフォルトの名無しさん
08/02/25 21:01:16
Visual Studioって 何処にヘッダファイル置けば
735:デフォルトの名無しさん
08/02/25 21:04:18
Visual Studioって 何処にヘッダファイル置けば
フルパス指定しなくて読み込めるんですか?
C:\Program Files\Microsoft Visual Studio 8\VC\include
でOK?
736:デフォルトの名無しさん
08/02/25 21:06:29
>>735
ソースファイルと同じ場所なら
#include"hoge.h"
でおk
737:デフォルトの名無しさん
08/02/25 21:09:06
>>733
大丈夫
君よりコンパイラのほうが賢いから
738:デフォルトの名無しさん
08/02/25 21:09:18
速度犠牲とか偉そうに言うやつほど、ダメなプログラマ
739:デフォルトの名無しさん
08/02/25 21:10:01
普通の初心者質問には答えないんだなぁ
740:デフォルトの名無しさん
08/02/25 21:11:48
本当に遅くなることばかりじゃないしな。
std::sort が qsort より概して速くなる、というみたいに、
インライン化されると問題ないことも多い。
741:デフォルトの名無しさん
08/02/25 21:14:36
>>738
色んな分野があるって前提で考えてるんだろう?
お前は組み込み系とビジネスソフト開発が同じだと思っているのか?
それにプログラミングしてればみんなプログラマって思考が気持ち悪い
お前見たいのは答える側に回るな
742:デフォルトの名無しさん
08/02/25 21:14:59
プログラマではないです、ただいろんな分野があってそれに合ったプログラミングがあることくらいはわかっています
でもやっぱり速度は気にしちゃいけないところですか、無駄だと思ってしまうところから直す必要がありそうですね
コンパイラの最適化というのも知らない分野ですし、当分は見通しの良いプログラムを目指してみようと思います
743:デフォルトの名無しさん
08/02/25 21:18:54
まず動くプログラムを書く。
そして遅ければ改善する。
この順だな。
744:696
08/02/25 21:19:34
696です。
先ほどのプログラムを訂正したら、
一行ほどしか出力されませんでした。
どこが間違っているのでしょうか。
URLリンク(www.borujoa.org)
745:デフォルトの名無しさん
08/02/25 21:26:58
これをちょっと弄って横長から縦長にしたいのですが、
いまいち組み方がわかりません。環境はLinuxでコンパイラはgccです。
#includeは省略
#define max 50
using namespace std;
class hist{
private:
string buffer;
int count;
int mat[max],i,j;
public:
int func(char *argv[]);};
int hist::func(char *argv[]){
ifstream fin(argv[1]);
if(!fin)return 0;
for(i=0;i<max;i++)mat[i]=0;
while(fin>>buffer){
count=strlen(buffer.c_str());
for(i=1;i<max;i++){
if(i==count)mat[i]=mat[i]+1; }
}
for(i=1;i<max;i++){
cout<<i;
for(j=0;j<mat[i];j++)cout<<"*";
cout<<'\n'; }
return 0;}
int main(int argc,char *argv[]){
hist hoge;
hoge.func(argv);
return 0;
}
746:696
08/02/25 21:28:43
すみません、あげるの忘れてました。
どなたか教えてください。
747:デフォルトの名無しさん
08/02/25 21:32:49
GNU global使えていう話じゃなくて?
748:744
08/02/25 21:37:58
>>747
そんなソフトがあったんですかw
ありがとうございます。
しかしそれではコーディングトレーニングにならないので、
ソースコードでよろしくお願いいたします。
どう考えてもイメージがわかないもので質問した次第です。
749:デフォルトの名無しさん
08/02/25 21:44:30
はじめまして
C++でプログラミングをしようと思っているのですが
開発環境等をどうしようか迷っています
将来的には
■ゲームを動かすプログラム(同人やエロゲのアプリ程度)
■補助ソフトやパッチ
■データを暗号化して格納するプログラム
等を作りたいと思っています
何かアドバイスがあればお願いします
750:デフォルトの名無しさん
08/02/25 21:45:47
VC++ でいいっしょ
タダだし
751:744
08/02/25 21:48:04
>>749
「C++の勉強したいんだがどの本買って勉強したらいいんですか?」
って聞いてるのと一緒だべ?
752:デフォルトの名無しさん
08/02/25 21:50:19
デザインパターン信者
私にもそんな時期がありました(マジで)
753:デフォルトの名無しさん
08/02/25 21:51:50
80:20の原則があるしな。経験つめばどこがホットスポットなのかが見当つくから、
プロファイルとってそこだけしぼって最適化すればいい。
最初から保守性犠牲にしてまでパフォーマンスチューニングが必要な分野って
限られてると思うよ。
754:デフォルトの名無しさん
08/02/25 21:55:02
>>749
今からC++勉強するよりもおまいは吉里吉里勉強したほうが幸せになれると思う
755:744
08/02/25 22:06:01
マイヘッドがクラッシュしてしまいそうなんですが、
エニバディー、ティーチ ミーしてくれませんか?
756:デフォルトの名無しさん
08/02/25 22:16:44
>>752
理解できずに挫折したか。
757:デフォルトの名無しさん
08/02/25 22:16:59
トオルさん帰れよ
758:デフォルトの名無しさん
08/02/25 22:18:58
>>744
関係はないが、とりあえずバッファを buffer_size しか確保してないのに
fgets で filesize 読もうとしてるのはヤバい。
759:デフォルトの名無しさん
08/02/25 22:28:27
>>744
else if(count > 0)
760:744
08/02/25 22:29:05
>>758
bufferはstring型でいこうとおもったんですが、
fin>>buffer;でやると、単語読み込みで一行読み込みにはならないし、
fgets(buffer.c_str(),filesize,fin);はコンパイラに怒られるし、
どうしようもないんで駆け込み寺としてここにきました。
たぶんこれも慣れた人なら簡単に直せるんだとは思いますが、
いままでC言語ばっかりやってたもんで、変な癖ついてるんです。
761:デフォルトの名無しさん
08/02/25 22:30:58
getline を知らんのか?
762:744
08/02/25 22:32:36
>>761
K&Rにも載ってたんで知ってます。
763:デフォルトの名無しさん
08/02/25 22:32:53
>744
よくわからんが、
一行よむなら、std::.getline( fin, buffer );だが。むろん、finはifstream辺りの必要はある。
初めて"{"が存在する行をみつけたとき、上のifでcount++になって、
下のifも成立してでcount++で2になるんだが、そういうものなのかね?
764:デフォルトの名無しさん
08/02/25 22:33:42
どこのK&Rだ、どこのw
765:デフォルトの名無しさん
08/02/25 22:35:10
>>750
あと必要な物はやる気と根気ですかね?
>>751
"だべ"ってどういう意味ですか?
マルチリンガーじゃないので日本語以外わからないんです、本当にごめんなさい。
766:デフォルトの名無しさん
08/02/25 22:36:48
>>765
キモス
767:744
08/02/25 22:43:14
>>759
else ifですか。基本的なところ躓きました。
ありがとうございます。勉強になりました。
>>763
そんな関数があったんですか。
ちょっとgetlineの中をのぞいて使わせてもらいます。
>>764
Cアンサーブックのほうです。
バイブル本とか釣られてやってみたけど、
糞面白んないんで解くのやめました。
768:デフォルトの名無しさん
08/02/25 22:44:52
可変のchar *のバッファ用意したいとき
string buf (n, '\0' );
&buf0]; ← これはchar*のところへ入れられる
と使うと便利だ 自動で消滅するし
769:744
08/02/25 23:06:24
>>768
下のほうhtmlのタグみたいですね。
奥の手っぽいんでどうしようもないときに使ってみます。
ありがとうございました。
770:デフォルトの名無しさん
08/02/25 23:48:16
>>744
さっき、恐らくは想定したと思われる仕様を完璧に満たすソースを書いたんだが、
反応がなかったから会社に置いてきちゃった。次に会社に出るのは3日後なんで、
後で寝ちゃわなければ軽く再現してみるよ。
771:デフォルトの名無しさん
08/02/25 23:57:46
>>770
>次に会社に出るのは3日後なんで
何でだ?
772:デフォルトの名無しさん
08/02/26 00:01:47
なんか、「それを記すにはあまりにも2chの投稿制限は厳しい」みたいに
続きそうな文章だなw
773:デフォルトの名無しさん
08/02/26 00:08:58
>>749
本体 > VC++
開発用ユーティリティ > TurboC++ Exploer (BCB)
でいいんでないの?
VC++はGUIアプリの構築はそれなりに手間かかるし、BCBは紙芝居の開発じゃ全然VCLの長所が生かせない。
774:デフォルトの名無しさん
08/02/26 00:16:21
>>771
単に、明日明後日は客先直行直帰だから。
>>744
手直ししながら、「クラスにする必要ないじゃん」とか
「変数は極力局在化しろよな」とか「マクロシンボルは大文字だろ」とか
「入力にfgets()を使うなら出力はfputs()じゃないか」なんて乗りで
修正してたらこうなった。
#include <cstdio> #include <cstring>
#define BUFFER_SIZE 1000
int func(char *argv[]) {
FILE * fin = fopen(argv[1],"r");
if (fin == NULL) return 1;
unsigned count = 0;
char buffer[BUFFER_SIZE];
while(fgets(buffer, sizeof(buffer), fin)!=NULL) {
if (count == 0) {
if (strchr(buffer,'{') != NULL) {
fputs(buffer, stdout);
count++;
}
} else if (count > 0) {
if (strchr(buffer,'{') != NULL) count++;
if (strchr(buffer,'}') != NULL) count--;
fputs(buffer, stdout);
}
}
fclose(fin);
return 0;
}
int main(int argc,char *argv[]) {
return func(argv);
}
775:744
08/02/26 00:36:44
>>774
まぁ人には癖があるからね。
ありがとう。
人と自分のソースを比較するのが、
一番勉強になるよ。
776:デフォルトの名無しさん
08/02/26 00:45:12
>>775
>774は常套句の宝庫だと思うよ。fgets(buffer, sizeof(buffer), fin)とか。
>744のクラスは、変数をばら撒くだけでクラスとしては何もしない無意味な設計だったし。
後はあれだな、関数に渡すのはconst char *にしてmain()で予めargcのチェックと
argv[1]の抽出位しておくのが常套手段か。
777:744
08/02/26 00:57:36
>>776
途中で配列にしたら楽だろうなぁとかは思ったが、
配列だと途中でサイズの変更が利かないから。
ポインタだと動的メモリの割り当てで適当なサイズに
割り当てできるし、と思っただけです。
別に機能さえあってればどのやりかたでもいいんだけど、
個人的には
stdoutの使い方がいまいちわかんなかったから、
そこが勉強になったのと、マクロの名前が大文字ね。
それ完全に忘れてたから勉強になった。
ありがとうってのは主にそこかなぁ・・・。
クラスは再利用に機能を発揮するから今の段階では必要としていないけど、
あとあと拡張していくにあたって必要になってくるから残しておきました。
確かにこの辺は言わんとわからんかったかもしれない。
突っ込まれたんで補足しておきました。
778:デフォルトの名無しさん
08/02/26 05:08:28
>726
ありがとう、ちょっと不安だったんだ。
名前も無いまま渡されるオブジェクトってどうなるんだろ、って。
779:デフォルトの名無しさん
08/02/26 05:56:26
ある関数に引数として構造体のポインタを渡し、そこにアドレスをセットして
返してもらうにはどう書けばよいのでしょう?
BOOL hoge( HOGE *ptr )
{
…略
ptr = address;
return TRUE;
}
としても上手く動かないようです。
780:デフォルトの名無しさん
08/02/26 06:00:17
>>779
整数を受け取るには整数のポインタを渡す必要がある。
構造体を受け取るには構造体のポインタを渡す必要がある。
構造体のポインタを受け取るには構造体のポインタのポインタを渡す必要がある。
781:デフォルトの名無しさん
08/02/26 06:03:19
あ!なるほど。こんな感じでしょうか?
BOOL hoge( HOGE **ptr )
ちなみにC++なのですが、参照渡しを使ってこれは良いのでしょうか?
BOOL hoge( HOGE *&ptr )
一応コンパイルは通るのですが…
782:デフォルトの名無しさん
08/02/26 07:25:27
OK
783:デフォルトの名無しさん
08/02/26 11:34:24
同じクラスなら、別のインスタンスのprivateなデータも参照出来ますよね。継承関係が
ある場合には、親オブジェクトから子オブジェクトを通して親オブジェクトのprivateデータを
参照できたのですが、これってこういうもの?
#include <iostream>
using namespace std;
class test2;
class test {
public:
void func(const test2 &a);
private:
int p;
};
class test2 : public test {
public:
void func2(const test2 &a);
};
void test::func(const test2 &a) {
cout << a.p << endl;
}
test2 T2;
int main()
{
test t;
t.func(T2);
return 0;
}
784:デフォルトの名無しさん
08/02/26 11:37:48
そういうもの。
785:デフォルトの名無しさん
08/02/26 11:40:09
>>783
というか出来ないとまずいだろ。
コピーコンストラクタとか代入演算子の定義が出来なくなってしまうよ。
786:デフォルトの名無しさん
08/02/26 12:06:04
protectedじゃなくてもアクセス出来ちゃうの?
787:デフォルトの名無しさん
08/02/26 12:22:23
protectedにすると、さらにtest2からも参照できるようになる
788:デフォルトの名無しさん
08/02/26 13:01:03
プログラムにZIPを解凍する機能を盛り込みたいのですが、そのような
機能のスタティックリンクできるライブラリをご存じないでしょうか?
環境はVisualC++.net2003です。
789:デフォルトの名無しさん
08/02/26 13:07:03
>>788
zlib
790:デフォルトの名無しさん
08/02/26 13:30:25
>>783じゃないが試してみたけど
同じクラスのインスタンスへの参照やポインタを持つとアクセス権限ブッチぎれちゃうのか
なんかカプセル化とかそういう面で考えると気持ち悪いというかなんというか
仕様上出来ないと仕方ないと言うのも分かるのだが・・・
791:デフォルトの名無しさん
08/02/26 13:33:53
789㌧
792:デフォルトの名無しさん
08/02/26 13:34:46
C++のprivateはクラスプライベートであってインスタンスプライベートの意味ではない
793:デフォルトの名無しさん
08/02/26 14:02:36
>>782
すみません、寝てました。返答有難うございます。
ちなみに「ポインタ変数を参照で渡す」と言う意味ならむしろ
BOOL hoge( HOGE &*ptr )
のような気がするのですが、なんで*&ptrなのでしょう?
それが仕様と言われればそこまでですが。
794:デフォルトの名無しさん
08/02/26 14:24:18
>>793
URLリンク(kmaebashi.com)
これの応用。
ptrのほうからreference to pointer to HOGEと読める。
795:デフォルトの名無しさん
08/02/26 14:26:03
>>793
typedef HOGE * HOGE_PTRしてみれば判る。
796:デフォルトの名無しさん
08/02/26 14:37:54
>>794>>795
なるほど。正直きちんと理解できたかは自信ないですが、ちゃんと法則が
あってそうなっているのは分かりました。
どうも有難うございましたm(__)m
797:デフォルトの名無しさん
08/02/26 14:46:05
vc2008のコマンドラインコンパイラだけ手に入りますか
vc6でコンパイルしたいです
sp1で鈍いパソコンです
798:デフォルトの名無しさん
08/02/26 14:48:16
EEを入れてみたか?
799:デフォルトの名無しさん
08/02/26 14:49:23
>>797
コンパイラだけ手に入れるのは無理だが
コマンドラインでの利用はできるよ
800:デフォルトの名無しさん
08/02/26 14:56:40
sp1にインストールできますか
801:デフォルトの名無しさん
08/02/26 15:02:40
>>792
kwsk
according to standard
802:デフォルトの名無しさん
08/02/26 15:49:24
すみません
DOSの実行ファイルで、標準出力へは書き出されないメッセージを取得する方法ありませんか?
hoge.exe > log.txt
として取得できないやつです 画面には出ます
標準出力、標準エラーの取り方はわかります
803:デフォルトの名無しさん
08/02/26 16:09:38
>>802
それのどこがC/C++に関係があるの?
804:デフォルトの名無しさん
08/02/26 16:18:38
>>802
つ printscreen
805:デフォルトの名無しさん
08/02/26 16:34:10
>>803
標準出力はこれで受け取れますが、exeが返す実行結果がとれません
#include <windows.h>
main(){
HANDLE hFile = CreateFile("log.txt",GENERIC_WRITE,FILE_SHARE_WRITE, NULL,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );
SetStdHandle(STD_OUTPUT_HANDLE , hFile);
STARTUPINFO si; PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));ZeroMemory(&pi, sizeof(pi));
si.cb = sizeof(si);
si.hStdOutput =hFile ;
si.hStdError =hFile ;
si.wShowWindow = SW_HIDE;
CreateProcess(NULL, "HtoX32c.exe e:\\0.htm ", NULL, NULL, FALSE,0, NULL, NULL, &si, &pi);
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
CloseHandle(hFile);
}
806:デフォルトの名無しさん
08/02/26 16:51:04
HtoX32とやらが標準エラー出力に出している可能性は無い?
そもそも、まさかHtoX32はWindowを持っているアプリケーションなのか?
だとしたら、メッセージフックなどの手段が必要になるよ。
つーか、HtoX32とやらが何ものかにも依るけど同等のプログラムを自分で書いた方が手っ取り早かったりしてね。
807:デフォルトの名無しさん
08/02/26 16:59:39
HTMLをテキストに変換するプログラムです
ソースが公開されていたり定番のライブラリとかありませんか?
808:デフォルトの名無しさん
08/02/26 17:03:03
正規表現での消し方のサンプルみながら自分でやってみます
809:デフォルトの名無しさん
08/02/26 17:11:51
>>805
URLリンク(support.microsoft.com)
810:デフォルトの名無しさん
08/02/26 17:15:43
popenを使えたら楽だな
あればだけど
811:デフォルトの名無しさん
08/02/26 17:44:11
>>805
そのコードだと、自プロセスの標準出力が hFile になるけど、子プロセ
スの HtoX32c.exe の標準出力はコンソールのままでは?
812:デフォルトの名無しさん
08/02/26 17:44:15
1つの関数に複数の構造体を渡すことって可能でしょうか?
suruct typedef{
int x,y;
}SAMPLE;
SAMPLE sample;
suruct typedef{
int x,y;
}SAMPLE2;
SAMPLE2 sample2;
void AA(??? *s){
int a = s->x;
int a = s->y;
}
void main(){
AA(&sample);
AA(&sample2);
}
こんな処理をしたいのですが、???の所がわかりません。
良い方法を教えていただきたいです。
仮の構造体を1つ作って、その変数に代入→渡すってやり方だとできましたが
激しく面倒くさい。
813:デフォルトの名無しさん
08/02/26 17:52:41
関数オーバーロード、もしくはテンプレート関数でぐぐれ。
814:デフォルトの名無しさん
08/02/26 17:54:43
>>812
typedef SAMPLE SAMPLE2;
815:デフォルトの名無しさん
08/02/26 18:02:57
>>813
>>814
情報ありがとうございます。
テンプレート関数が一番やりたかった事を解決してくれそうでした。
ありがとうございました。
816:デフォルトの名無しさん
08/02/26 18:10:58
構造体のメンバを決め打ちするようなテンプレート関数は感心しないな。
テンプレートを使うということはC++で良いので、それならメンバ関数にしてしまった方が良い。
817:デフォルトの名無しさん
08/02/26 18:22:32
ifstream::readって実際に何バイト読めたか検出できないんですか?
freadみたいにふつうに戻り値が来るのかと思いきや違うみたいですし…。
818:デフォルトの名無しさん
08/02/26 18:28:13
つ gcount
819:デフォルトの名無しさん
08/02/26 18:29:13
>>817
自己レス。failで少なくとも期待通りの
バイト数読めたかどうかは取得できるのね。
820:デフォルトの名無しさん
08/02/26 18:30:30
>>818 と思ったらそんなメソッドがあったか。サンクス
821:デフォルトの名無しさん
08/02/26 18:31:39
fstreamは重要なところでは使うべきではない
APIのほうがよい
822:デフォルトの名無しさん
08/02/26 18:55:55
んなこたーない
823:デフォルトの名無しさん
08/02/26 19:18:08
fstreamは一社の開発ではないがAPIはMS一社
どのコンパイラでも同じ動作になる
あと3000個とか開けない
824:デフォルトの名無しさん
08/02/26 19:18:50
if文って 文字列と文字列を比べることって出来ないですよね?
1 = あいうえお
2 = かきくけこ
3 = さしすせそ
4 = あいうえお
if (a = 1){
}
みたいなことをやりたいのですがどうしたら良いでしょうか?
825:デフォルトの名無しさん
08/02/26 19:19:44
stringはできる
826:デフォルトの名無しさん
08/02/26 19:20:33
> どのコンパイラでも同じ動作になる
コンパイラで差はないかもしれないが・・・
827:デフォルトの名無しさん
08/02/26 19:21:41
>>823
んなばかな
APIがMS一社で規定されてるなんて初めて知った
MSはついに世界を征服したのか
828:デフォルトの名無しさん
08/02/26 19:23:04
Windowsのファイル入出力APIのことを指す
829:デフォルトの名無しさん
08/02/26 19:55:08
>>824 strcmpしとけ
830:デフォルトの名無しさん
08/02/26 21:19:23
CreateProcessしたときに止まらなくなったら停止させたいんですけど
どうやったらいいですか?
831:デフォルトの名無しさん
08/02/26 21:22:25
ググって解決しました
832:デフォルトの名無しさん
08/02/26 21:58:13
マルチスレッドで動かしてる関数って_endthread()書かなくてもreturn;書いてたら
問題ない?
833:デフォルトの名無しさん
08/02/26 22:04:41
問題ない。
ところで_beginthreadは使うなよ。_beginthreadexにしろよ。
URLリンク(msdn2.microsoft.com)(VS.80).aspx
834:デフォルトの名無しさん
08/02/26 22:15:49
VC6.0です。
__declspec(dllimport) int __stdcall hoge( LPWORD, LPWORD, LPWORD );
という形の関数のアドレスが入る関数ポインタhageを作りたいのですが、
うまく宣言できません。
__declspec(dllimport) int __stdcall (*hage)(LPWORD, LPWORD, LPWORD );
などとやるとコンパイルエラーになってしまいます。
どうすれば宣言できるのでしょうか?
835:デフォルトの名無しさん
08/02/26 22:17:26
declspecは関係ないだろ
836:デフォルトの名無しさん
08/02/26 22:19:03
関係あるよ
837:デフォルトの名無しさん
08/02/26 22:19:32
関数ポインタで悩んだら、typedef
typedef __declspec(dllimport) int __stdcall hogetype( LPWORD, LPWORD, LPWORD );
hogetype hoge;
838:デフォルトの名無しさん
08/02/26 22:36:15
関数ポインタの便利さになれすぎてしまって
最近 if を見るたびにすぐ関数テーブル化してしまう。
間違い?
839:デフォルトの名無しさん
08/02/26 22:39:07
なるべくシンプルにかくのを推奨されますからね
840:デフォルトの名無しさん
08/02/26 22:43:09
関数テーブル間違いです
鈍いです
841:デフォルトの名無しさん
08/02/26 22:47:58
なんかCreateProcessすると不安定になる スレッドでsystemで実行してみる
CreateProcessを短期間に20回以上使うと動かなくなるエラーってありますか?
実行する側のexeのせいかもしれないですが
842:デフォルトの名無しさん
08/02/26 22:50:02
テーブルだめなのか・・
if の中にさらに if があるともうその地点でうわ・・って思ってしまう。
ちょっとソース見直してみます
843:デフォルトの名無しさん
08/02/26 22:50:41
>>833
ありがとう。今度からそうする
844:デフォルトの名無しさん
08/02/26 22:54:19
そこでBoost::functionとコールバックですよ。
845:デフォルトの名無しさん
08/02/26 22:59:28
>>842
無理して避けることもないよ。何事も程々が1番。
846:デフォルトの名無しさん
08/02/26 23:02:18
グローバル変数って絶対使わない方がいいんですかねえ
例えばゲームプログラムを作っていて、状態を管理するグローバル変数を使っているとする。
その変数には、ゲームの進行に合わせて、例えば
定数(TITLE=0, STAGE1, STAGE2, STAGE3, STAGE_CLEAR, GAME_OVER, ENDING)が入るとする。
処理は上の状態それぞれでモジュール化されているとすると、
どうしても状態管理変数はグローバル変数化してどの状態からでも
参照・設定できるようにせざるを得ないと思うのですが、何かいい手があるのでしょうか。
状態管理変数をファイル内static変数にしてセッターを使って書き換えるようにしたり、
状態管理変数とセッターをクラスにしてそのオブジェクトのスコープをグローバルにするもしくは状態管理変数とセッターを
staticにしてどのクラスからでも書き換えられるようにするくらいなら最初から状態管理変数をグローバルにしといた方が
シンプルだと思うのですがどうでしょうか。
847:デフォルトの名無しさん
08/02/26 23:03:57
数が多くなければOK、重要ならOK
848:デフォルトの名無しさん
08/02/26 23:05:38
>>846
静的なシングルトンもグローバル変数も似たようなもんだ
グローバル変数でいいんじゃね?
ただ、関数経由にしておけばデバッグするときに setter で引っ掛ければいいだけだから
ずいぶんと楽になる*かもしれない*
849:デフォルトの名無しさん
08/02/26 23:30:59
>>846
シングルタスクなら良いけど。
GUIでスレッド使って随時処理しながら入力待ちして、
入力はコールバックで処理、みたいのだと、
ゲッタやセッタ作った方が排他処理し易いかなぁ。
まぁケースバイケース?
850:デフォルトの名無しさん
08/02/26 23:32:07
ゲーム状態のインスタンスが1つだけなら、グローバル変数でいいと思う。
インスタンスが複数なら、
状態ごとの処理に、状態管理変数をクラス化したものを渡すとか、
もしくはstateパターンなんてのもいいかもしれない。
851:デフォルトの名無しさん
08/02/26 23:33:35
どうせグローバル変数的に使うとはいえ、
それゆえにどこから変更されてるかを追跡するためにも
>関数経由にしておけばデバッグするときに setter で引っ掛ければいいだけだから
というのは地味に大事
852:デフォルトの名無しさん
08/02/26 23:38:31
ゲーム状態も例えば、プレイヤキャラの他にAIキャラが裏で進行中なんてことになると、
グローバルだと破綻するよね。そんな場合はゲーム状態はキャラクタに依存する情報になるわけだけど。
853:デフォルトの名無しさん
08/02/26 23:46:14
シングルトンとグローバル変数は違う。
グローバル変数として使ってる間違ってる例が多いのが勘違いの原因かもしれない。
自分だったら>>846の場合、シーンマネージャクラスを作ってそいつに振る舞いを管理させる。
極力グローバル変数は使わない。
854:デフォルトの名無しさん
08/02/27 00:01:10
シングルトンは初期化のタイミングを選べるからグローバルとは大きく違う。
855:デフォルトの名無しさん
08/02/27 00:20:00
結局オブジェクト指向の導入でCにおけるグローバル変数使用の問題は解決できてないんじゃねえの
Cを極めればオブジェクト指向言語を使わなくても良いコードが書けるんじゃねえの結局クラスとか
オブジェクトとかデザインパターンとか複雑で分かりにくくするなだけじゃね
856:デフォルトの名無しさん
08/02/27 00:21:36
system は空白が改行のように扱われてしまいます
パラメータは渡せませんか?
857:デフォルトの名無しさん
08/02/27 00:22:49
>>855
んなこたーない
858:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/27 00:28:04
>>856
どんな文字列を渡したとき?
860:デフォルトの名無しさん
08/02/27 00:28:08
見た感じフォーマットは固まってるだろうから
単純に先頭からパースするだけじゃね
861:デフォルトの名無しさん
08/02/27 00:29:09
string s;
s.substr(0,4);
s.substr(5,2);
s.substr(7,2);
とかでいいのでは?
862:デフォルトの名無しさん
08/02/27 00:31:49
>>858
fscanf(fp, "%d/%d/%d,%d:*[^\n]", &tmp[0], &tmp[1], &tmp[2], &tmp[3]);
863:デフォルトの名無しさん
08/02/27 00:31:50
>>859
自己解決しました 同名のexeがありそれが動いていたようです
864:デフォルトの名無しさん
08/02/27 00:34:11
862の訂正 *の前に%
fscanf(fp, "%d/%d/%d,%d:%*[^\n]", &tmp[0], &tmp[1], &tmp[2], &tmp[3]);
865:デフォルトの名無しさん
08/02/27 00:34:23
>>855
>Cを極めればオブジェクト指向言語を使わなくても良いコードが書けるんじゃねえの
これは当たり前なんだが、(といってもオブジェクト指向を使わないって意味じゃない、
Cでもオブジェクト指向は昔から存在する)
>結局クラスとかオブジェクトとかデザインパターンとか複雑で分かりにくくするなだけじゃね
何が複雑なんだ?
デザインパターンなんか当たり前の設計パターンに名前付けただけじゃないか。
866:デフォルトの名無しさん
08/02/27 00:36:27
変数へのアクセスを制限することで単純になるんだけどなぁ。
無制限に変数にアクセスできたほうが複雑だって、わかんないかなぁ。
867:デフォルトの名無しさん
08/02/27 00:48:26
Perlの文法が糞なのは間違いない。
868:858
08/02/27 01:12:38
>861
レスありがとうございます。
が、、私ではうまいこと使えませんでした。ごめんなさい。。
>860, 864
fscanfでできました。
どうもありがとうございました。
869:デフォルトの名無しさん
08/02/27 01:23:50
C++で配列のコピーってどうやりますか?
for()文で代入を回す?
870:デフォルトの名無しさん
08/02/27 01:24:40
memcpyが最速では
871:デフォルトの名無しさん
08/02/27 01:26:15
>866
何を以て「単純」とするかに依るんだろうな。
多分 >855 は言語の構造として単純であること、習得の容易さなどを見て言っているんだろうが
大きなコードを、そのまま扱うと中身はかなり複雑化する。
クラスや名前空間などを使って、大きなコードを小さな部品の集合体として考えて
それぞれの部品単位で扱うことで、ひとつひとつの部分は単純になる。
872:デフォルトの名無しさん
08/02/27 01:26:28
>>869 std::copy()
873:デフォルトの名無しさん
08/02/27 01:27:43
>>870 C++ で memcpy() は使わない。禿との約束だよ。
874:デフォルトの名無しさん
08/02/27 01:30:02
推奨されていなくても確保の仕方から
vectorでもstringで有効でしょう memcpy
875:デフォルトの名無しさん
08/02/27 01:31:12
memcpyより自分でアセンブラ書いた方がはやかったんだけど、そんなもん?
876:デフォルトの名無しさん
08/02/27 01:31:59
>>875 それはめずらしい。
877:デフォルトの名無しさん
08/02/27 01:39:54
memcpyより早いコードくれ
878:デフォルトの名無しさん
08/02/27 01:40:26
SSE使ったんだけどね
879:デフォルトの名無しさん
08/02/27 02:17:49
マイクロソフトのCHMファイルはなかなかいいんだけど
SJISしかコンパイルできなくて、サイズが20Mとかになるとコンパイルに失敗する
CHMをパクってWindowsの標準ヘルプ形式を作りたい
参加者募集中
圧縮接尾辞配列がいいと思う
ブロックーソーティングしたデータはそのまま全文検索できるとおもうがどうか?
880:デフォルトの名無しさん
08/02/27 02:27:20
複数のテキスト文書を圧縮できてかつ高速に全文検索できて
CHMのような普及率を目指したい
デスクトップサーチとは目的が違う 元のファイルが復元できてまとめられる点が大事
881:デフォルトの名無しさん
08/02/27 02:28:28
tarでいいじゃない
882:デフォルトの名無しさん
08/02/27 02:33:30
tarは全文検索できるように設計されてるの?
883:デフォルトの名無しさん
08/02/27 02:38:51
tarは圧縮しないからね。
884:デフォルトの名無しさん
08/02/27 02:40:51
>>875
アラインメントに縛りを入れれば早くはできると思う
885:デフォルトの名無しさん
08/02/27 02:46:44
半分にはならないとだめだな chmは全文検索できて元の半分になるよ
886:デフォルトの名無しさん
08/02/27 02:51:09
>>880
専ブラのログをまとめるのに便利そうだ
あてにせず期待してるよ
887:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/27 03:41:52
std::string
のような STL クラスを前方宣言するにはどうしたらいいですか?
それともこういうクラスって前方宣言しないでヘッダーに直接 include
させても問題ないですか?
889:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/27 04:20:39
×cout << "Hellow, World!" << endl;
○std::cout << "Hello World!" << std::endl;
891:デフォルトの名無しさん
08/02/27 04:21:19
あんたが外国にいるんじゃなかったら、本を買って勉強しる。
とりあえず、
std::cout << "Hellow, World!" << std::endl;
としてやってみ。
もしくは、
using namespace std:
をinclude 文の下に書いておくとか。
まあがんばれ。
892:デフォルトの名無しさん
08/02/27 04:24:33
>>890
ありがとうございます。
using namespace std; を追加したらコンパイルできました・・・ ^ ^;
最初、#include <iostream.h> としていて、コンパイル時にそんなファイルは無いと言われ、
#include <iostream> に直したら今度は cout が定義されて無いと言われ・・・
完全に勉強不足ですね・・・・
893:デフォルトの名無しさん
08/02/27 04:48:08
>892
環境によっては
#include <iostream.h>
と書くと、using namespace std; を勝手にやってくれるんだわ。
多分、そういう環境を前提にしたコードだったんだろう。
894:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/27 09:02:30
>>895
ありがとー 出来ました。
コンパイルは出来てましたがNULLが表示されました。
getchar();しないと画面が速攻閉じてしまうので、画面確認用にです。
897:デフォルトの名無しさん
08/02/27 09:06:36
>>896
修正したソースを張ってみないと有効な回答は得られないと思うよ。
898:デフォルトの名無しさん
08/02/27 09:09:57
int* random_array(int n);
shared_ptr<int> p(random_array(100));
というように書けないのですが、shared_ptrの作成時って、必ずnew[100]とかって
やらないとだめなのですか?
899:デフォルトの名無しさん
08/02/27 09:30:04
>>898
arrayの共有にはshared_arrayな。
それとエラーメッセージ書かないとエスパーしか解答できない。
900:デフォルトの名無しさん
08/02/27 11:36:18
system("path %PATH%; C:\\hofe;");
が有効になりません・・・
なぜでしょう
901:デフォルトの名無しさん
08/02/27 11:59:17
>>900
環境変数はプロセスごとに別々だから
子プロセスを起動してPATHを設定させても自プロセスには影響しない
902:デフォルトの名無しさん
08/02/27 12:07:43
改行しても無理でした パスを直うちするか、そこへ移動するしかないですか?
APIでPath設定できるか調べてみます
system("path C:\\hofe; \n abc.exe");
903:デフォルトの名無しさん
08/02/27 12:20:15
pathを追加する方法教えてください わかりませんでした
904:デフォルトの名無しさん
08/02/27 12:24:10
SetEnvironmentVariable
905:デフォルトの名無しさん
08/02/27 12:30:25
サンクス
長い実行パスと、長いパラメータパスで困ってました
これで解決しそうです
906:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/27 13:51:44
>>907
テラThanks
909:デフォルトの名無しさん
08/02/27 13:57:03
まず間違いなく大丈夫ではあるものの一応標準外の仕様だと心にとどめておくといい
910:デフォルトの名無しさん
08/02/27 14:02:11
winsockを使うときエコーバックするのは普通ですか?
それとも負荷を下げるためにしませんか?
少量ずつデータ受け取ればミスしにくくなると思うんですけど
少しずつ受け取って確認無しでいいですか
911:デフォルトの名無しさん
08/02/27 14:02:13
次の改訂で標準になるけど、コンパイラの対応が普及するまで合わせると、
問題ないと言えるのは何年も先かなぁ。
912:デフォルトの名無しさん
08/02/27 14:09:00
http先のファイルのサイズやcrcを取得する方法教えてください
それみてデータが正常が判定したいです
913:デフォルトの名無しさん
08/02/27 14:23:32
>>910
何をどこにエコーバックするんだ
ミスって何のだ
>>912
ファイルサイズは全部受信すればわかるだろう
CRCの計算方法はこれ↓
URLリンク(en.wikipedia.org)
914:デフォルトの名無しさん
08/02/27 14:40:20
>>912
サイズはレスポンスヘッダのContent-Length (ない場合もある)
CRC は無理かと
915:907
08/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("この番号は登録されています②\n番号%s\n",str);
}
else {
printf("この番号は登録されていません\n番号%s\n",str);
}
このようなif文にしたいのですが、登録したbuf[]を読み込んでも"この番号は登録されていません"
と表示されてしまいます。なぜでしょうか?
916:デフォルトの名無しさん
08/02/27 14:53:34
std::vectorとCStringでは、empty() (とEmpty()) の意味違うのね~
しばらく騙されてました。
917:デフォルトの名無しさん
08/02/27 14:54:36
stlのset使った方がいいんじゃない
918:デフォルトの名無しさん
08/02/27 15:03:58
>>915
strを表示させてみるんだ
919:デフォルトの名無しさん
08/02/27 15:06:37
>>914
GETでして送られてくるヘッダをみるんですよね?
2chのスレURLいれるとサイズ書いてないです
できる限りなんとか取得する方法無いですか?
920:デフォルトの名無しさん
08/02/27 15:08:28
送受信のデータです
GET スレリンク(livemarket2板) 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:デフォルトの名無しさん
08/02/27 15:12:53
動的に変化するから無理そうですね
通信切れで見られないHMLの取得を避けたいんですけどいい方法ありませんか
922:デフォルトの名無しさん
08/02/27 15:15:27
最後に </html> が無かったら途中で切れたと判断するとか
923:デフォルトの名無しさん
08/02/27 15:20:51
普通のテキストならどうしたらいいですか?
もともと不完全なHTMLならどうしたらいいですか?
サーバーのファイルと一致していてもエラーになります
924:915
08/02/27 15:23:30
>>918
str は 0106719d0 になっているようです><
なんでうまくいかないんだろう。。
925:デフォルトの名無しさん
08/02/27 15:25:54
>>922
HTML4では </html> は省略可能なので万能じゃない
>>920
Connection: close
って書いてあるから接続断まで読めばそれで全部。
あと、なるべくHTTP/1.1使え
手元で確認した限り、HTTP/1.1でアクセスすると
chunked で送ってくるので末尾がちゃんと確認できる
926:920
08/02/27 15:28:36
サンクス
927:デフォルトの名無しさん
08/02/27 15:34:26
>>924
sprinf で \n を付けているのに str1, str2 には付いていないぞ
928:デフォルトの名無しさん
08/02/27 15:35:55
HTMLパーサは↓程度はきちんと解析してくれないとねぇ‥‥
46 名前:デフォルトの名無しさん[sage] 投稿日:2008/01/27(日) 00:38:23
これだって正しいでっせ
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "URLリンク(www.w3.org)">
<title>テスト</>
<p><em/ほげほげ/
<p style=width:50px<strong>ふーばー</strong</p>
929:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/02/27 15:44:16
1.1はHostヘッダの送信が必須
931:デフォルトの名無しさん
08/02/27 15:44:52
1.1だと、ユーザー情報も送信しないと無理になるんですか
932:デフォルトの名無しさん
08/02/27 15:54:08
なおらないです どうすればいいですか?
GET /test/read.cgi/livemarket2/1202634378/ HTTP/1.1
Accept: */*
Referer: URLリンク(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:デフォルトの名無しさん
08/02/27 15:58:54
改行大杉
934:デフォルトの名無しさん
08/02/27 16:01:24
2回改行するのは最後だけ
935:915
08/02/27 16:02:42
>>927
盲点でした。
やっと次の作業に進めそうです。本当にありがとうございます。
936:デフォルトの名無しさん
08/02/27 16:06:31
サンクス 改行削って上手くいきました
あと受け取るバッファを多くすると返却値を間違えるようなんです
どうやれば直りますか?
n = recv(sock, &buf[0], 128000, 0);
としてnまで表示するとデータ入ってないときがあります
937:デフォルトの名無しさん
08/02/27 17:05:30
めっちゃミジンコの質問させて下さい。
図書館で借りてきた本のページが抜けてて%cはどういう時に使うのか
わかりません;
%はぐぐれないみたいで困ってます。
938:デフォルトの名無しさん
08/02/27 17:08:24
>>937
URLリンク(www.linux.or.jp)
文字じゃね?
939:937
08/02/27 17:16:21
>>938
まだ始めたばかりなのでこのサイトはちょっと厳しいです・・・。
文字ということで本を読みすすめてみます。
有難うございました。
940:デフォルトの名無しさん
08/02/27 19:49:40
>>932,936
send も recv も、指定したサイズ未満しか送受信できないことがあるので、
その場合にも対応すること。
あと、エラー処理もちゃんと毎回やること。
941:デフォルトの名無しさん
08/02/27 20:53:29
HTTPで初めにサイズだけ取得したとして、読む位置をデータの始まりにシークできますか?
初期化からやり直した方がいいですか?
データ位置を自前で判別して方がネットワークの負荷は少なくなりますが
942:デフォルトの名無しさん
08/02/27 20:55:33
自己解決しました
いったん全部読み込んで、ヘッダとデータを分離してサイズが不一致なら再送にします
943:デフォルトの名無しさん
08/02/27 20:56:50
すいません。タイトルにふさわしく初歩的な質問ですが、
ポインタはメモリを格納しているアドレスの位置を指す
と言いますが、ではそのポインタの情報はどこに格納
されるのでしょうか?
944:デフォルトの名無しさん
08/02/27 21:01:14
実行時なら、それを格納しているのがポインタ変数。
コンパイル時、&xという記述からどうやってxのアドレスを知るかと言うことなら、
それはコンパイラの仕事、コンパイラが決めること。
945:デフォルトの名無しさん
08/02/27 21:08:38
つまりint とか char とかと同じような感じでアドレスが入ってる変数があるってだけさ
946:デフォルトの名無しさん
08/02/27 21:09:38
ごめん語弊がありますねすいません
(入ってるのアドレスだけじゃないですね)
947:デフォルトの名無しさん
08/02/27 21:11:45
普通はアドレスだけだと思うが。
メンバポインタとかは別だが。
948:デフォルトの名無しさん
08/02/27 21:12:50
string x, y="*****"; となっていたとして、
xとyのデータを一致するようにできますか コピーではなくて
949:デフォルトの名無しさん
08/02/27 21:14:24
int a,b=10;
&a=&b;のような事はできないですよね?
950:デフォルトの名無しさん
08/02/27 21:14:35
string x = "*****", y = x;
という話ではなくて?
951:デフォルトの名無しさん
08/02/27 21:16:08
string だと共用体が使えないから
参照にするしかないな。
string y = "*****", &x = y;
952:デフォルトの名無しさん
08/02/27 21:16:48
同一アドレスの同一データにしたいのですが 無理ですよね
953:デフォルトの名無しさん
08/02/27 21:18:11
x も xもポインタにして確保した同じとこさせばいいんじゃね?
954:デフォルトの名無しさん
08/02/27 21:19:46
>>949
アドレス演算子の結果は右辺値だと思った。
955:デフォルトの名無しさん
08/02/27 21:21:38
>>949
int *ap = &a;
int *bp = &b;
ap = bp;
956:デフォルトの名無しさん
08/02/27 21:25:39
>>952
何でそう言う事がしたいの?
957:デフォルトの名無しさん
08/02/27 21:36:28
すでに確保された変数のアドレスを書き換えるテクがあるかなと思った
958:デフォルトの名無しさん
08/02/27 21:38:06
アドレスはマシン語にそのまま組み込まれてるんだぜ?
959:デフォルトの名無しさん
08/02/27 21:40:37
変数は極端な話レジスタに載ってるかも知れないわけで。
string x,y="...";
#define x y
960:デフォルトの名無しさん
08/02/27 21:43:17
string y = "*****", &x = y;
とした場合、最適化で x と y が同一視される可能性はあるんじゃないかな。
961:デフォルトの名無しさん
08/02/27 21:47:24
>>957
変数のアドレスは、変数が確保されたときに固定されるものだろ。
「すでに確保された変数のアドレスを書き換えるテク」を期待する目的がわからん。
962:デフォルトの名無しさん
08/02/27 21:50:29
論理アドレスくらいなら書き換えることは可能かもしれない。
963:デフォルトの名無しさん
08/02/27 22:22:39
class CSample2{};
class 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を指したままかわりません。
参照戻しではできたのですが、これで出来ない理由がわからず気持ち悪いです。
どなたか原因のご教授お願いします。
964:デフォルトの名無しさん
08/02/27 22:23:37
vectorに関数ポインタを格納するにはどうしたらいいでしょうか?
vector<bool (*func)(int)> EroeroFunction;
↑<>の中のカッコが悪戯してうまくコンパイルが通らなくて困ってます。
構造体に関数ポインタを入れればなんとかなるんですが、メンバが1つしかないのでなんとも。
965:デフォルトの名無しさん
08/02/27 22:27:29
かなりのFAQ。引数経由でポインタを戻すなら、ポインタのポインタかポインタ参照か
どっちかつかえ。
< 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;
}
966:デフォルトの名無しさん
08/02/27 22:27:58
>>963
get関数内でobj_s2を書き換えても、呼び出し側のobj_s2は書き換わらない。
関数に引数を渡す際の基本だろ?
ポインタを書き換えたいなら、ポインタをアドレス渡しでもすればいい。
void get( CSample2** ppobj_s2 ) { *ppobj_s2 = &m_obj_s2; }
obj_s1.get( &obj_s2 );
967:デフォルトの名無しさん
08/02/27 22:29:45
>>964
vector<bool (*)(int)> じゃないの?
968:デフォルトの名無しさん
08/02/27 22:33:46
vector<char>って後方に同じ型を連結できますか
そういう関数ありますか
969:デフォルトの名無しさん
08/02/27 22:34:45
>>968
言ってる意味が分からない。
970:デフォルトの名無しさん
08/02/27 22:35:22
push_backでは一つしか増やせません 一度に増やすやつないですか
971:デフォルトの名無しさん
08/02/27 22:36:14
>>968
std::copyとstd::back_inserterを組み合わせるんじゃねーの?
972:デフォルトの名無しさん
08/02/27 22:36:42
>>968
こういうこと?
vector<char> v1, v2;
v1.insert(v1.end(), v2.begin(), v2.end()); // v1の末尾にv2の全要素を追加
973:デフォルトの名無しさん
08/02/27 22:37:22
vector<int> x,y;
x={1,2,3}
y={4,5,6}
x.push_back(y)={1,2,3,4,5,6}
こういうやつです
974:デフォルトの名無しさん
08/02/27 22:39:20
それでできますかサンクス
975:デフォルトの名無しさん
08/02/27 22:41:49
まんまinsertでいいんじゃね?
976:デフォルトの名無しさん
08/02/27 22:42:56
insertやね
operator+=を外部に定義しておくと便利かも
977:デフォルトの名無しさん
08/02/27 22:47:04
要素の連結か、要素ごとの+=か曖昧なので、そんなのいらんかも
978:デフォルトの名無しさん
08/02/27 23:07:18
C言語なんですが
配列でポインタ表現を使ってアクセスしてインクリメントようと思って
*(array+i)++としたら'++'には左辺値が必要です、とエラーが出てきました
これは配列で宣言したからだと思うんですが
ポインタで宣言した場合は値が飛び飛びになるので、*(array+i)みたいな表現できないでしょうし
どうすればいいでしょう?
979:デフォルトの名無しさん
08/02/27 23:09:43
(*(array+i))++;
++*(array+i);
変なことになったらとりあえず優先順位を疑うのは基本。
980:デフォルトの名無しさん
08/02/27 23:10:19
*((array++)+i) // arrayを増やす場合
*(array+i++) // iを増やす場合
981:デフォルトの名無しさん
08/02/27 23:11:35
*(array+i) と array[i] は優先順位以外は等価。
982:デフォルトの名無しさん
08/02/27 23:12:23
>>979
できました。ありがとうございます。
優先順位って今まで全然気にしてませんでしたので
今後注意して行こうと思いますorz
983:デフォルトの名無しさん
08/02/27 23:14:10
>>979 と >>980 のどちらを意図してるんだろうか。
それはともかく、array[i]++; と書けばいいのに
何でそうしないのか本気で理解できない。
984:デフォルトの名無しさん
08/02/27 23:27:31
i++[array]と書くのが漢
985:デフォルトの名無しさん
08/02/27 23:30:03
漢すぎるwwwwww
986:デフォルトの名無しさん
08/02/27 23:39:05
(*(array + i))++; ←等価→ array[i]++; ←等価→ i[array]++;
array++[i]; ←等価→ *((array++)+i) ←等価→ i[array++];
i++[array]; ←等価→ array[i++]; ←等価→ *(array+i++);
987:デフォルトの名無しさん
08/02/27 23:40:43
はじめて見た。
誰だよこんな書き方見つけた奴……
988:デフォルトの名無しさん
08/02/27 23:43:59
*(E1+E2) と E1[E2] の挙動は等価だと規格に書いとるべ。
*(array+i) と *(i+array) が等価なのと同じく
array[i] と i[array] も等価だべ。
989:デフォルトの名無しさん
08/02/27 23:44:30
array[i]を*(array+i)の糖衣構文とすることを発案した人が真っ先に見つけただろうな。
で、誰?
990:デフォルトの名無しさん
08/02/27 23:45:42
(i % 16)["0123456789ABCDEF"]
991:デフォルトの名無しさん
08/02/27 23:45:54
string x,y; N=0; x.resize(0); に対して
x+=y;
と
memcpy(&x[N],&y[0], y.size()); N+=y.size;
は同じのはず
yがバイナリデータだと上が失敗することが多いです
992:デフォルトの名無しさん
08/02/27 23:47:15
>>990
すげぇwwww感動したwwwwwww
993:デフォルトの名無しさん
08/02/27 23:49:12
>>991
x のメモリ確保はどこ行った。
994:デフォルトの名無しさん
08/02/27 23:50:05
メモリ確保はあらかじめしておいてください あと最後にNでresizeも
995:デフォルトの名無しさん
08/02/27 23:50:49
>>991
stringに文字列以外入れるなよ。
あと、x.capacity() >= y.size() でないとmemcpyがメモリ壊すぞ。
996:デフォルトの名無しさん
08/02/27 23:51:46
>>994
同じというなら、同じになるコードを書けよ。
997:デフォルトの名無しさん
08/02/27 23:53:00
変な入門書で配列のとこにすぐにその記法が説明してあったからできるのは知ってたけど、
できる理由は全然考えたことがなくて、今はじめて理解したw
998:デフォルトの名無しさん
08/02/27 23:53:19
zipファイルを少しずつyに入れてからxに足し込むんですけど
memcpyの方は書き出して復元できますが、+=はまれに正常でほとんど壊れます
原因はなんでしょう
999:デフォルトの名無しさん
08/02/27 23:55:24
>>998
vectorを使わずstringを使ったから。
1000:デフォルトの名無しさん
08/02/27 23:55:32
なんで文字列じゃないものをstringに入れるんだ。
1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。