X



【初心者歓迎】C/C++室 Ver.101【環境依存OK】 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2017/07/18(火) 07:07:27.20ID:vzMDiUgd
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。

【アップローダー】(質問が長い時はココ使うと便利)
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

前スレ
【初心者歓迎】C/C++室 Ver.100【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1478440682/
0746デフォルトの名無しさん
垢版 |
2017/09/28(木) 19:16:02.07ID:kmv+HSxh
コンパイラの仕様書に書いてないよ普通
ポインタのビット数が書いてあるだけで
0747デフォルトの名無しさん
垢版 |
2017/09/28(木) 19:19:48.44ID:Ktm1uHRp
>だからダメな例を出せって
そしたら逆にコンパイラの仕様書でOKって書いてある例を出せ
って話になるでしょ
無ければグレーゾーンになるわけだ
まさに未定義
0753デフォルトの名無しさん
垢版 |
2017/09/28(木) 21:45:26.80ID:kaEtfd73
単純な話、ベンダー提供のマクロで言語仕様上保証されないような使い方がされていたとして、
そのマクロ自体の動作はベンダーが保証しても同じコードがそのマクロ外で保証されるわけじゃないよね。
実際には動くかもしらんけど。
0755片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/09/28(木) 23:35:41.44ID:Msp1dHAD
昔は学生運動が一大イベントだった。鉄砲の音が聞こえたら、学生たちが一斉に走り回る。それは軍隊のように団結力のある集団だった。
0757はちみつ餃子 ◆8X2XSCHEME
垢版 |
2017/09/29(金) 00:55:18.83ID:qoI7k83w
>>753
「こんな最適化するのか!」って思うようなピンポイントな最適化は有るから、
逆にピンポイントな例外だってありそうよね。
0758デフォルトの名無しさん
垢版 |
2017/09/29(金) 06:49:45.56ID:hLpF+zSQ
>>753
マクロとそれを展開したソースで動きが異なるってこと?
さすがにそれは考えにくいと思うけど
0760デフォルトの名無しさん
垢版 |
2017/09/29(金) 11:32:53.08ID:7lA4sLJU
お前らが何を話しているのかわからん
相手に何を伝えたいのか
お前らは何を訴えたいのか
何も見えてこない
俺がないならもうやめろ
0765デフォルトの名無しさん
垢版 |
2017/09/30(土) 01:55:47.47ID:+yH9ha/d
ちょっと不可解な部分があったから質問させてくれ

string型のデータをサーバに送信したくてOSSの関数に渡しているんだが、
データが一部壊れてしまう
問題のコードは、

string str = "{id:abc, ... , }"
void* payload = (void*) str.c_str();
send(payload, str.length());

これをやると、先頭の5バイトがうまく入らない
いくら考えても全然理由がわからず、意味のないことだと思いつつも以下のコードを書いてみたら何故かうまくいった

string str = "{id:abc, ... , }"
char* tmp = (char*)malloc(str.length() * sizeof(char) + 1);
strcpy(tmp, str.c_str());
payload = (void*)tmp;
send(payload, str.length());

下のコードを使えばうまく動いてるから問題ないんだけど、上のコードがダメな理由がわからずすごく気持ち悪い。
何か上の例だとまずい部分があるのかな?

送信関数は以下
send(void* payload, size_t length);

環境はVC++ 2012
Windows 7 64bit

ちなみに、同じコードを別環境(gcc 4.4.7 Cent OS 32bit)で動かすと、両方うまくいった
0767デフォルトの名無しさん
垢版 |
2017/09/30(土) 02:45:21.56ID:mQbjCOfm
非同期やbufferedの関数を正しく使えてないんだろ
たしか以前にboost.asioかなんかの同じような質問をきいたことがあったような
0769デフォルトの名無しさん
垢版 |
2017/09/30(土) 07:12:02.93ID:7qICbiUO
そのインターフェースで非同期なのに 内部で実体のコピーをとってない場合とかだと
実際に送信完了するまで 渡した引数の実体が生きてる必要があるね
0771765
垢版 |
2017/09/30(土) 10:38:13.12ID:+yH9ha/d
みんな回答ありがとう。

>>766
string型のメソッドで、文字列をconst char*にするやつ

>>767,769
非同期送信にはなってるんだけど、sendの後に送信結果を受け取る関数を呼んでる。
そのあとでpayloadは解放されるようになってるから、送信完了までは実体は生きてると思う

>>770
OSSの関数がそう定義されてるから変換したんだ


{id:abc. ... , }
のうち先頭5文字の{id:aがおかしくなってるんだよね・・
Wiresharkでみると、バイトコード88ってなってたけどなんでそうなったのかが全然わかんない
0772デフォルトの名無しさん
垢版 |
2017/09/30(土) 10:53:58.34ID:V/gsXwon
>sendの後に送信結果を受け取る関数を呼んでる。
>そのあとでpayloadは解放されるようになってる

ならそのsendのバグか他でのメモリ破壊だろ
そのコード自体には問題はない
0774デフォルトの名無しさん
垢版 |
2017/09/30(土) 11:28:17.88ID:tI4TVI1o
問題点の切り分けは大事だな
元のソースを問題が再現する最小限のところまで切り詰めてみるとか
その過程で問題が起きなくなったら関係ないと思って切り詰めたところが原因だろうし
0775デフォルトの名無しさん
垢版 |
2017/09/30(土) 13:47:25.00ID:jk0Saihc
どうおかしくなってるのか分からない
"{id:abc, ・・・"が"XXXXXbc, ・・・"となる(ascii 88 = 'X')ってことなのか
0776デフォルトの名無しさん
垢版 |
2017/09/30(土) 23:34:44.40ID:WG2DMprw
すいません
メモ帳ソフトのTextTreeみたいに
タブを並べられて、そのタブごとに個別のツリーを格納するには
どうしたらいいんでしょうか?
ttp://www.vector.co.jp/magazine/softnews/080129/images/n08012931b.gif

なんでここで聞くかというと
TextTreeの開発者のコメントに
「wxWidgets」をいじっていたので、これを使って作ってみようと思った、というのがあって
そのwxWidgetsのHPに
wxWidgets is a C++ library〜
と表記されていたからです。

普通のメモやテキストエディタは
ツリー>タブ>メモという構成ですが
Texttreeのような
タブ>ツリー>メモという構成が希望ということです。

またTextTreeは、リッチテキストが扱えるものの
文字が65535バイト以上入力できず、それ以上は入力しても消えてしまうバグを抱えていて
どうしてそのような不具合になるのかも知りたいのですが…
0777デフォルトの名無しさん
垢版 |
2017/09/30(土) 23:53:50.61ID:xUuIbR05
>>771
> そのあとでpayloadは解放されるようになってるから、送信完了までは実体は生きてると思う

str.c_str() 渡した場合は str の寿命や変更で解放されることになる。
他のどこかで解放されるようになってるとしたら、そんなところに渡してはいけないと思う。

どこかで free されることになってるなら、 malloc したポインタを渡さないと
正しく動かないということで >>765 の結果で当然に思う。

「OSSの関数」というなら具体的な関数を明示すればもっと状況がわかるのに。
0778デフォルトの名無しさん
垢版 |
2017/10/01(日) 00:34:39.70ID:QEgiuasJ
>>776
wxWidgets固有のことは知らないけど
タブごとにツリーを用意して各タブに対応する子ウィンドウに配置するだけでしょ
もしくはツリーを一つだけ用意してタブ切り替えのたびに中身を書き換えればいいんじゃない
0779デフォルトの名無しさん
垢版 |
2017/10/01(日) 02:46:34.57ID:CsBQRyQX
>str.c_str() 渡した場合は str の寿命や変更で解放されることになる。

いやだから、payload==str は送信結果を受けてから
開放してるって本人は言ってるのでは?
0780デフォルトの名無しさん
垢版 |
2017/10/01(日) 08:09:58.98ID:a+6SxdIf
明示的に解放しないstringの方はそこを意識してなかった可能性もあるんじゃね?
非同期ってことは>>765でsendした関数からは一旦抜けてるでしょ?
0781デフォルトの名無しさん
垢版 |
2017/10/01(日) 09:03:15.51ID:XhBoqkon
>>776
1つの方法としては
タブが切り替えられる毎にイベント発生するから
タブAが押されたらダイアログAを表示してそれまでに表示されてたダイアログは非表示にする
ダイアログ毎にツリーとリッチエディットを用意したらいい

あとWin32APIスレの方がいいよ
0784デフォルトの名無しさん
垢版 |
2017/10/01(日) 10:26:50.12ID:7TdPvZgo
>>780
>>771
>> 非同期送信にはなってるんだけど、sendの後に送信結果を受け取る関数を呼んでる。
>> そのあとでpayloadは解放されるようになってるから、送信完了までは実体は生きてると思う
ってあるからその可能性は低いと思う
0785デフォルトの名無しさん
垢版 |
2017/10/01(日) 10:32:30.15ID:qINK5MH4
vc2012だとC++11への準拠はどうなんだろ
c++11以降はc_strも実体を指す保証があるようだけど、
以前は関数内のstatic変数みたいな実装してた気がする・・
0786デフォルトの名無しさん
垢版 |
2017/10/01(日) 11:40:53.20ID:Q5nZisR/
>>784
初心者歓迎スレだし可能性は少なくない
GC言語で育ったならポインタをスマポのような何かと勘違いしてるかもしれない
さらにその文章から思い込みだけで検証していないのは明らかだし
0790デフォルトの名無しさん
垢版 |
2017/10/03(火) 19:50:33.30ID:VzAuCmWc
shared_ptrを戻すメンバ関数があるんですが
引数の条件に一致する物が無い場合、空というのが分かるshared_ptrを返したいんです。
どう書けばいいですか?
0794デフォルトの名無しさん
垢版 |
2017/10/04(水) 15:03:07.29ID:B6Js2yoS
>>788
いちいち古いVC入れ直すのめんどいから覚えてるんなら書いてほしいんだが

あと>>765が解決したのかどうかも知りたい
0795デフォルトの名無しさん
垢版 |
2017/10/04(水) 21:20:20.65ID:eGyO5ooe
初心者的質問で申し訳ないですが、libファイルの検索仕方を教えて下さい。
includeファイルはgrepかければ見つかりますが、リンクするとき、静的ライブラリ、libファイルの検索はどうすればいいか分かりません。
とりあえず、怪しい奴を片っ端からリンクしますが、それもどうかと思います。
マニュアルに書いてある訳でもないので皆さまどうされてるのか気になります。
0797775
垢版 |
2017/10/05(木) 07:26:13.70ID:/WMFst6h
ありがとうございます。
ネットで調べるのがメインなので、つい、本はケチってしまいました
bgrepは入れられないので-aでなんとかしてみます
0799デフォルトの名無しさん
垢版 |
2017/10/05(木) 21:31:37.51ID:Px1fI0/v
いちいちけなさんと会話も出来んのかゴミクズが
へー、じゃあ寿命は保証されてるわけか、そんなことはなかったはずだが
>>765の問題は寿命の問題だと思うが、ケチつけるなら正確に書いてくれる?
混乱を招くだけのイチャモンとか何の役にも立たんわ
0801デフォルトの名無しさん
垢版 |
2017/10/06(金) 00:14:51.51ID:M5Ph95zK
03以前は変更された後にc_str()を使うのも、そもそも内部で連続してる保証も無かったはず
今調べたけどdata(), c_str()の呼び出しでも変更される可能性があるらしい(11は大丈夫
0804デフォルトの名無しさん
垢版 |
2017/10/07(土) 15:35:22.92ID:cqowZFEs
それポインタじゃなくて整数でよくない
0805デフォルトの名無しさん
垢版 |
2017/10/07(土) 16:29:02.76ID:jvf7kHO4
ポインタと整数じゃ概念が違う
整数をアドレスを指し示す用途で使いますよってのがポインタだし
0808デフォルトの名無しさん
垢版 |
2017/10/07(土) 19:03:08.66ID:AU7JWIym
みなさんありがとうございます
規模の大きいデータで使うみたいですね
後は他の関数を飛び越えてアクセスしたい時とか
0810デフォルトの名無しさん
垢版 |
2017/10/10(火) 15:59:13.06ID:3nxFazlM
p==p_rgh + rho*gh;
とあるのですが意味がわかりません。
p=p_rgh+rho*gh;であるべきと思うのですが、==と=が使い分けされているので
タイプミスではなさそうです。どなたかよろしくお願いします。
0811片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/10/10(火) 16:10:57.64ID:RmsAElXw
>>810
「p==p_rgh」は、pとp_rghが等しいとき1 (true)になり、等しくないときゼロ (false)になる。
0812片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/10/10(火) 16:14:41.98ID:RmsAElXw
>>810
演算子「==」より演算子「+」の方が結合が強いんだった。
「p==p_rgh + rho*gh」は、pとp_rgh + rho*ghが等しいときtrueになる。
0813デフォルトの名無しさん
垢版 |
2017/10/10(火) 19:02:14.11ID:z98emhq8
>>810
問題のその式が、if文のカッコの中ではなく、普通に式文としてセミコロンで終わる1行として書かれているなら、ただの誤記の可能性が高いと思うよ。
0814デフォルトの名無しさん
垢版 |
2017/10/10(火) 19:04:42.99ID:3nxFazlM
>>812
ご回答ありがとうございます。が、やはりわかりません。
たとえば、
if (p==p_rgh + rho*gh)
{

}
や、q=p==p_rgh + rho*gh;とかならわかるのですが、


p==p_rgh + rho*gh;

と独立しているのでどんな処理をしているのか・・・
0816片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/10/10(火) 19:12:17.54ID:RmsAElXw
>>814
そのように独立していれば何もしない。何もしない文をわざわざ複雑に書くことは意味がないので、代入を間違って書かれたと考えられる。
0818デフォルトの名無しさん
垢版 |
2017/10/10(火) 20:44:10.61ID:9u7+xOBM
そのコードでググったら流体シミュレーション系のライブラリが出てきたけど
=の誤植っぽいな
0821デフォルトの名無しさん
垢版 |
2017/10/12(木) 08:00:09.14ID:sPruOUUO
パズルとか頭の体操みたいな意味では
キチガイじみた演算子オーバーロードも面白いんだけどね。

これを業界用語で
"Proving Grounds of the Mad Overload" と呼んだりする。
0823デフォルトの名無しさん
垢版 |
2017/10/13(金) 01:27:13.01ID:DZqiVJRN
p ghってなに
0825デフォルトの名無しさん
垢版 |
2017/10/13(金) 01:43:21.69ID:DZqiVJRN
で、p ghってなに?
0827デフォルトの名無しさん
垢版 |
2017/10/13(金) 06:55:33.00ID:kwktlkZb
>>414 の最後のコード部分からの文脈なんだけど…。

この式が何を計算するプログラムか情報が欲しいってことかな。
あるいは "pgr" や "ggrks" みたいなネットスラングと思ったのかも。
0828デフォルトの名無しさん
垢版 |
2017/10/13(金) 07:59:25.08ID:IEqvHxzW
ぷげはー
0829827
垢版 |
2017/10/13(金) 11:29:02.31ID:kwktlkZb
いかんいかん、重要なアンカーを間違えたわ。
もちろん 414 は誤りで 814 と書くつもりだった。

「一連の流れでの p や gh は >>814 に出てる識別子」ってことね。
0830デフォルトの名無しさん
垢版 |
2017/10/13(金) 11:34:16.38ID:qDJA92iZ
>>829
なるほど
前を見てなかったわ
0831デフォルトの名無しさん
垢版 |
2017/10/14(土) 13:55:38.78ID:c4RRY+Fs
http://webings.net/c/cal/
ここのソースコードをバーチャルスタジオにコピペしてビルドして実行してもHTML形式で表示してくれないんですが
HTML形式で表示するには何が必要なんですか?
0839片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/10/14(土) 14:33:48.58ID:WLIJLkzn
ウェブサーバーのインストールくらいは本を読まずに小学生でもできる。
ウェブサーバーについて知りたいなら「ウェブサーバーとは」で検索。
ウェブサーバー側のプログラムは、標準出力にHTMLを出力するただのコンソールプログラムか、スクリプトプログラムだ。
ブラウザーでウェブサーバーにアクセスすると、ウェブサーバー経由で出力されたHTMLが見れる。
0840片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/10/14(土) 14:43:24.68ID:WLIJLkzn
"Content-type: text/html\n\n"
これは、httpヘッダーというものだ。これはHTMLテキスト以外にブラウザーと対話するためのデータだ。
httpヘッダーは、二つの改行コード("\n\n")で終わる決まりになっている。
0841片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/10/14(土) 14:56:36.99ID:WLIJLkzn
ウェブについてはウェブ技術関連だから、C/C++とは別の話になる。スレ違いだから、ウェブ技術板へ行った方がいいかも知れない。
0844デフォルトの名無しさん
垢版 |
2017/10/14(土) 17:42:42.94ID:3MCmUjcj
>>839
>>840
>>841
>>842
ありがとうございます
web関連の知識になるんですね
他の分野とC言語を結ぶ知識の仕入れ方って難しいですね・・・
最近DBの本を読んでますがこれと何らかの言語を結びつけるような知識の仕入れ方もよく解りません
苦C読んでさぁつぎ何読めばいいのって感じになります
0845片山博文MZ ◆T6xkBnTXz7B0
垢版 |
2017/10/14(土) 17:50:52.07ID:WLIJLkzn
>>844
Web関係をやりたいのかい? WebではCはあまり使わないよ。使うなら、JavaScript, Java, PHP, Python, RoR, SQLぐらいかな。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況