【初心者歓迎】C/C++室 Ver.49【環境依存OK】at TECH
【初心者歓迎】C/C++室 Ver.49【環境依存OK】 - 暇つぶし2ch938:デフォルトの名無しさん
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を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch