■過去ログ置き場に戻る■
1-
前250
次250
最新50
[memo]
"9999999999_00.html#R20"
という感じで、URLの最後に "#R
レスNo
" を追加すると幸せになれます。
C++相談室 part21
251
名前:
デフォルトの名無しさん
:03/07/18 18:20
perlとかのsplitみたいにstringを複数のstringに分割する関数はないですか?
252
名前:
デフォルトの名無しさん
:03/07/18 18:25
>>251
boost::tokenizerがいいと思う。
#include <boost/tokenizer.hpp>だけで使えるし
253
名前:
デフォルトの名無しさん
:03/07/18 18:27
>>251
split みたいなのは知らんなぁ。
文字列の切り出しは substr くらいかな?
あとはここでも読んでちょ。
http://www.wakhok.ac.jp/~sumi/stl/index.html
254
名前:
デフォルトの名無しさん
:03/07/18 18:32
>>252
> #include <boost/tokenizer.hpp>だけで使えるし
だと良いね
255
名前:
デフォルトの名無しさん
:03/07/18 18:40
>> #include <boost/tokenizer.hpp>だけで使えるし
>だと良いね
良いよぉ。まさかお前C++を使っていてboostを
構築はともかくインストールしていない訳じゃああるまい
256
名前:
デフォルトの名無しさん
:03/07/18 18:42
その言い訳は苦しい
257
名前:
デフォルトの名無しさん
:03/07/18 18:44
まあインストールしていないのは英語が分からない奴くらいだろうな
258
名前:
デフォルトの名無しさん
:03/07/18 18:48
言えば言うほど見苦しい
259
名前:
デフォルトの名無しさん
:03/07/18 18:49
芳ばしい臭いがするので、ちょっと晒し上げておこう
260
名前:
デフォルトの名無しさん
:03/07/18 18:49
>>257
コンパイラがしょぼいのも無理ぽ。
261
名前:
デフォルトの名無しさん
:03/07/18 18:50
むしろラインセンス
262
名前:
デフォルトの名無しさん
:03/07/18 18:52
ちょっと指摘されただけで英語云々持ち出さんでも・・・
「boostにはこんなのあるよ」の一言を忘れただけなんだから次回から気をつければいいだけだろ・・・
263
名前:
デフォルトの名無しさん
:03/07/18 18:56
>>262
なんだお前は英語が読めないのか?
>「boostにはこんなのあるよ」
そう言う内容なのは明らかだろ。お前は読解力ゼロ
264
名前:
デフォルトの名無しさん
:03/07/18 18:59
boostつかうと保守に問題が出るよな。
265
名前:
デフォルトの名無しさん
:03/07/18 19:01
英語厨のおでましか
266
名前:
デフォルトの名無しさん
:03/07/18 19:01
>>264
お前は今後一切使うな
267
名前:
デフォルトの名無しさん
:03/07/18 19:04
>>263
読解力無いのはオメーだろ。
内容が明らかなのとboostがインストール済みかどうかはまったく別問題だ。
boostにケチはつけんが、boostスレじゃない場所でboostがインストール済みであることを前提に話す奴は逝ってよい。
相手は初心者かもしれん。
268
名前:
デフォルトの名無しさん
:03/07/18 19:05
必死なのがいるなぁ。俺も晒し上げておこう。上から2スレ目だけど。
269
名前:
デフォルトの名無しさん
:03/07/18 19:09
まぁ煽り文句で「英語が読めないのか」は王道だよな
270
名前:
デフォルトの名無しさん
:03/07/18 19:32
どっかの会社が、boostを商用ライブラリとして出してくれないかなぁ
271
名前:
デフォルトの名無しさん
:03/07/18 19:39
>>268
ワロタ
272
名前:
デフォルトの名無しさん
:03/07/18 20:39
つーか、boostのライセンスのどこが問題なんでしょう?
regex使ったら、使ったこと書いてね!!
以外になんか不満あるようなもんあるんでしょうか?
273
名前:
デフォルトの名無しさん
:03/07/18 20:47
完全にboostスレ向きの質問だと思うが
274
名前:
デフォルトの名無しさん
:03/07/18 21:37
そしてboostスレでもライセンスの話題は何度か出ている。
275
名前:
デフォルトの名無しさん
:03/07/18 23:35
stringstream の中身をクリアするにはどうしたらいいんですか?
clear()を呼んでも残っているみたいなんですが。
276
名前:
デフォルトの名無しさん
:03/07/18 23:56
>>275
たぶんそれは、basic_ios::clear()を呼んでいる。
中身をクリアするってのはないけど、
str(string const&)で文字列を割り当てることができるので、
空の文字列を割り当てればよい。つまり
str(string());
277
名前:
デフォルトの名無しさん
:03/07/19 00:37
>>275
eraseしろ!!
>>273
boostスレではライセンスに(商用でも)問題ない(らしい)という結果だったはず。
でも、問題があるよといわれれば、どこが問題なのかやはり気になるもんでね。
278
名前:
デフォルトの名無しさん
:03/07/19 00:51
ttp://www.tietew.jp/cppll/archive/5777
279
名前:
277
:03/07/19 01:09
>>278
大変ありがたいのだが、すでにそのページは拝見しております。
私が気になるのは、問題があるという人は何をもってしてそう判断したのか?ということです。
新しい発見(?)したとか。何かの特許に抵触したとか・・・。
280
名前:
デフォルトの名無しさん
:03/07/19 01:46
>>279
英語を読めない人の妄言です。
281
名前:
デフォルトの名無しさん
:03/07/19 03:31
C++自体の質問なのでスレ違いかもしれませんが、よろしければご教授ください。
A.cppというファイルからB.hとC.hをIncludeして使おうと思っています。
C.hではクラスの宣言をしています。
そして、A.cppではそのインスタンスを作成しています。
しかし、B.hで作成したインスタンスのメンバーを読み込もうとすると、
コンパイル時に、そのインスタンスが『未定義』とされエラーがでてしまいます。
その後、A.cppでインスタンスを作成する場所でも『再定義』というエラーがでるので、
きっと、宣言の順番の問題なんだろうと思うのですが、何かよい解決策はないでしょうか。
わかりにくい文章ですみませんが、よろしくおねがいします。
282
名前:
281
:03/07/19 03:34
すみません。
最初にこのスレを見つけられずに、他のスレッドに書き込もうとしていたので、
その時書いた文章の残骸が残ってしまいました。
スレ違い云々は気にしないでください。
申し訳ありませんでした。
283
名前:
デフォルトの名無しさん
:03/07/19 04:04
いつもいつも思うんだが
質問したいならageろ!
よろしくお願いしたいならageろ!
あほか。なにがメール欄に「sage」だよ。
きどってんじゃねーよ。
284
名前:
デフォルトの名無しさん
:03/07/19 04:05
B.h には何が書いてあるの?
285
名前:
デフォルトの名無しさん
:03/07/19 04:05
癖でsageちゃうことはよくあるよね。
286
名前:
デフォルトの名無しさん
:03/07/19 04:20
yes
287
名前:
デフォルトの名無しさん
:03/07/19 04:23
いつもいつも思うんだが
スレ違いの事を書き込むならsageろ!
晒し上げじゃないならsageろ!
あほか。なにがメール欄に「nuge」だよ。
荒らしてんじゃねーよ。
288
名前:
デフォルトの名無しさん
:03/07/19 04:25
代わりに上げてやってるんじゃないか。
しかもアドバイスしてさ。
親切じゃない。
289
名前:
デフォルトの名無しさん
:03/07/19 04:31
余計な御世話じゃないの?
漏れなら、アドバイスだけして、本人に揚げさせる
290
名前:
デフォルトの名無しさん
:03/07/19 04:38
まぁ、こういうどうでもいいレスで
ちゃんとしたレスを埋もれさせるのが一番不本意なので、
ちゃんとしたレスにアンカーを貼っておこう。
質問
>>281
レス
>>284
291
名前:
デフォルトの名無しさん
:03/07/19 05:32
余計な御世話
292
名前:
デフォルトの名無しさん
:03/07/19 11:49
クラス内で定義されている名前を
クラス外で::なしで使うにはどうすればよいですか?
class A
{
public:
typedef int type;
static const size_t SIZE;
};
みたいなときに
A::type i; size_t n = A::SIZE;
とかではなく
type i; n = SIZE;
とか書く方法はないでしょうか。
using A::type;
とかはだめみたいです。
293
名前:
デフォルトの名無しさん
:03/07/19 11:51
クラス外で定義しろ
294
名前:
292
:03/07/19 11:56
>>293
ごめんなさい。よくわかりません。
295
名前:
デフォルトの名無しさん
:03/07/19 11:57
>>292
出来るが、そんなことして欲しくないので教えない。
296
名前:
デフォルトの名無しさん
:03/07/19 12:01
>>292
typedef A::type type;
const int SIZE=A::SIZE;
と事前に書いとく
297
名前:
292
:03/07/19 12:01
>>295
いじわるしないでぇ
そんなことして欲しくない理由と共に教えてください。
ちっちゃな翻訳単位ローカルに使うんだったら
そんなに悪くないとおもうんですが。
298
名前:
デフォルトの名無しさん
:03/07/19 12:02
何のためにそんな事するのか小1時間・・・
299
名前:
292
:03/07/19 12:03
>>296
なるほど。っていうかそんなことも思いつかん褐炭か>俺
ありがとうございます。
300
名前:
デフォルトの名無しさん
:03/07/19 12:04
やるのかよ。
いや、別にいいけどさぁ・・
301
名前:
292
:03/07/19 12:05
いやぁん♥
冷たくしないでぇ
302
名前:
デフォルトの名無しさん
:03/07/19 12:14
(c +_+) なんだかなあ……
303
名前:
292
:03/07/19 12:16
はじめて自分の偽者とであいました。
こんにちは
>>301
304
名前:
281
:03/07/19 13:10
>>281
です。
>>284
わかりにくくてすみません。
B.hでは別のクラスが宣言されています。
簡単に書くと、こんな感じです。
[B.h]
class CHuman
{
int Speed;
void SetSpeed(void) { Speed = Ball.Spin; } ●1
};
-------------------
[C.h]
class CBall
{
int Spin;
};
-------------------
[A.cpp]
#include "B.h"
#include "C.h"
CHuman tanaka;
CBall Ball; ●2
main()
{ tanaka.SetSpeed(); }
●1が、未定義のエラーが出るところ、●2が再定義のエラーが出るところで、
それぞれの変数はpublicで宣言されていて、コンストラクタで数値が代入されていると考えてください。
たびたびの長文すみませんが、よろしくおねがいします。
305
名前:
デフォルトの名無しさん
:03/07/19 13:12
そりゃ出るわな
306
名前:
デフォルトの名無しさん
:03/07/19 13:13
>>281
ポインタで宣言してコンストラクタで new すれば?
307
名前:
デフォルトの名無しさん
:03/07/19 13:14
>>304
B.hで
#include "C.h"
extern CBall Ball;
とするか、SetSpeed の実装をcppに分ける。
308
名前:
デフォルトの名無しさん
:03/07/19 13:16
印来るドのジュンバン
#include "C.h"
#include "B.h"
CBall Ball; はいらない。
と思う漏れは実はC++なんてよく知らないのだが(w
309
名前:
デフォルトの名無しさん
:03/07/19 13:21
継承したクラスのコンストラクタについての質問です。
CParentと、それを継承したCInheritedがあります。
CInheritedのコンストラクタで、
1.
CInherited::CInherited():CParent(){
}
2.
CInherited::CInherited(){
CParent::CParent();
}
は何が違うのでしょうか。
310
名前:
デフォルトの名無しさん
:03/07/19 13:33
>>304
#include "C.h"
CBall Ball;
#include "B.h"
CHuman tanaka;
こんなかんじにしたら
311
名前:
デフォルトの名無しさん
:03/07/19 13:36
>>309
初期化の優先順位が違う。
こんな感じ
312
名前:
デフォルトの名無しさん
:03/07/19 13:37
>>281
もしやとは思うが、
ヘッダを
#ifndef HOGE
#define HOGE
//ここに本文
#endif
でくくる方法は知ってるよな?
313
名前:
デフォルトの名無しさん
:03/07/19 13:38
プリプロセッサで再定義を防げばインクルードの順番なんて関係ないはずだぞ。
314
名前:
281
:03/07/19 13:47
>>312
すみません、知りませんでした。
調べてみる事にします。
結局
>>307
のやり方でやってみたら、なんとかできました。
こたえてくださったみなさん、ありがとうございました。
315
名前:
デフォルトの名無しさん
:03/07/19 13:50
>>309
struct A{
A(){
std::cout<<this<<" A"<<std::endl;
}
};
struct B : public A{
B():A(){
std::cout<<this<<" B"<<std::endl;
}
};
/*
struct B : public A{
B(){
A::A();
std::cout<<this<<" B"<<std::endl;
}
};*/
Bの定義を入れ替えて実行結果を見てみろ。
>>311
はアホ
316
名前:
デフォルトの名無しさん
:03/07/19 13:55
CParent::CParent(); は一時オブジェクトってこった。
317
名前:
デフォルトの名無しさん
:03/07/19 14:29
標準C++ではコンストラクタには名前がないから
CParent::CParent()などとして呼ぶことはできない
318
名前:
デフォルトの名無しさん
:03/07/19 15:54
map<int,int> hoge;
return hoge[0];
とかやったら、intにコンストラクタはないから返り値は未定ですよね。
int型とかにコンストラクタをつけたい場合は新しくクラスを作るしかないですか?
319
名前:
デフォルトの名無しさん
:03/07/19 16:15
>>318
intはデフォルト初期化で0になるので返値は0です。
320
名前:
デフォルトの名無しさん
:03/07/19 17:12
template<typename Iter>
class Value_iter : public Iter
{
public:
Value_iter(const Iter &it): Iter(it){}
typedef typename Iter::value_type::second_type value_type;
value_type operator*()
{
return Iter::operator*().second;
}
value_type operator->()
{
return Iter::operator->().second;
}
};
こういう感じで、一部の関数を上書きするために公開継承を使っても問題はないでしょうか。
std::map<A,B>::iterator 辺りを渡されることを期待するテンプレートです。
321
名前:
320
:03/07/19 17:15
考えてみれば operator-> は要らなかった…
322
名前:
デフォルトの名無しさん
:03/07/19 17:26
>>318
int n = int(); // デフォルトコンストラクタ
// 0で初期化
assert(n == 0);
323
名前:
デフォルトの名無しさん
:03/07/19 17:49
>>320
ほとんどの場合、問題「ある」。例えばその例なら、
Value_iter<map<key,val>::iterator> i;
val x = *i++; // error
324
名前:
デフォルトの名無しさん
:03/07/19 18:17
>>323
ああ、なるほど。理解しました。有難うございました。
325
名前:
デフォルトの名無しさん
:03/07/19 19:17
クラスメンバのconstな関数ポインタ変数って初期化できんのー?
class CMoe {
const void (*pFunc)();
public:
CMoe(void (*func)()):
pFunc(func) // だめぽ
{
}
};
326
名前:
デフォルトの名無しさん
:03/07/19 19:38
void (* const pFunc)();
だろ
327
名前:
デフォルトの名無しさん
:03/07/19 19:42
const void型って何だ(笑)
328
名前:
デフォルトの名無しさん
:03/07/19 21:00
>>323
何ゆえ *i++ ←(increment operator)関数どこ?
>>320
意味ない。何のためのiteratorがあるのかわかる?
>>327
const void はそのままじゃんか。何か?
329
名前:
デフォルトの名無しさん
:03/07/19 21:51
>>328
キミ、会話の意味がわかってないなら黙ってた方がいいと思うよ。
330
名前:
Error 改行が多すぎます
:03/07/19 22:19
>>325
#include <iostream>
using namespace std;
const void test(){
cout << "test" << endl;
}
class CMoe{
protected:
const void (*pFunc)();
public:
CMoe(const void (*func)());
void Do();
};
CMoe::CMoe(const void (*func)()){
pFunc = func;
}
void CMoe::Do(){
(*pFunc)();
}
int main(){
CMoe moe(test);
moe.Do();
return 0;
}
331
名前:
325
:03/07/19 22:20
>>326
なーる。サンクス!
スマソ、も1つ。
class CHoe {
// うにょにょ〜(operator=なし)
};
int main() {
CHoe hoe;
vector<CHoe> Moe;
Moe[0] = hoe; // CHoeにoperator=が定義されてない。
return 0;
}
ちゃんと定義しないとダメ?
332
名前:
325
:03/07/19 22:24
>>325
そう、まさにそれがやりたかった。ありがと。
333
名前:
デフォルトの名無しさん
:03/07/19 22:44
>>332
334
名前:
328
:03/07/19 23:36
>>329
意味わかんないかな?
こんなのは使わんけど。
#include <iostream>
#include <map>
#include <string>
template<class T,class U>
struct TorU : std::map<T,U>::iterator
{
typedef typename std::map<T,U>::iterator base;
TorU(std::map<T,U>& m) : base(m.begin()){}
operator T(){ return base::operator ->()->first; }
operator U(){ return base::operator ->()->second; }
};
int main()
{
using namespace std;
map<int,string> cs;
cs.insert(pair<int,string>(0,"ring 0")) ;
cs.insert(pair<int,string>(1,"ring 1")) ;
TorU<int,string> tu(cs);
while(tu != cs.end()){
cout<<(int)tu<<' '<<(string)tu<<'\n';//castめんどくせー
++tu;//ここがポイントなのよ
}
}
335
名前:
デフォルトの名無しさん
:03/07/19 23:44
>>334
黙ってた方がいいと思うよ。
336
名前:
const void???
:03/07/19 23:49
誰か
>>328
を日本語に訳してくれないか?
337
名前:
328
:03/07/20 00:12
沈黙・・・・・・
338
名前:
328
:03/07/20 00:45
なんだconstのほうかよ
これで納得いかないか?
#include <iostream>
template<class T> struct Imitation;
template<>
struct Imitation<void>
{ static void fun(){ std::cout<<"Variant"<<std::endl; } };
template<>
struct Imitation<const void>
{ static void fun(){ std::cout<<"Constant"<<std::endl; } };
int main()
{
Imitation<const void>::fun();
Imitation<void>::fun();
}
339
名前:
328
:03/07/20 00:51
おおっと
>>320
よみなおしたら意味違ったすまん。
340
名前:
デフォルトの名無しさん
:03/07/20 01:53
むしろ
>>332
の
>>325
を日本語に訳して欲しいわけだが…
341
名前:
331
:03/07/20 06:34
ごめ。
単にCHoeのメンバがconstだったり参照だったりしてただけだった。
代入演算子が生成されないんだね。
342
名前:
_
:03/07/20 06:42
http://homepage.mac.com/hiroyuki44/
343
名前:
デフォルトの名無しさん
:03/07/20 15:29
template <class T> void foo(T){}
template <class T> struct bar{};
template <class T> void foo(bar<T>){}
int main(){
bar<int> b;
foo(b);
}
以上のプログラムがコンパイル通りません。
そこで以下のようにしたら無事とおりました。下のプログラムはC++的に正しいですか?
template <class T> void foo(T){}
template <class T> struct bar{
friend void foo(bar<T>){}
};
int main(){
bar<int> b;
foo(b);
}
344
名前:
デフォルトの名無しさん
:03/07/20 15:31
うわー、びっくりした。
345
名前:
デフォルトの名無しさん
:03/07/20 15:34
static 変数をメンバに持つクラスから、幾つかのクラスを派生させ、
それぞれの派生クラスのインスタンスを作った場合、
ベースクラスから継承した一つの static 変数をそれらで共有することになりますか?
厨でスマソ。
346
名前:
デフォルトの名無しさん
:03/07/20 15:37
>>345
なる
347
名前:
デフォルトの名無しさん
:03/07/20 15:39
>>343
上の通るなあ。bcc32
348
名前:
343
:03/07/20 15:42
>>347
VC7では通らなかったのですが、、、
上の例は関数の部分的特殊化に当たるから不可、なのではないのですか?
349
名前:
345
:03/07/20 15:42
>>346
つまらない質問に付き合って下さって、ありがとうございます。
350
名前:
デフォルトの名無しさん
:03/07/20 15:53
>>348
ISOのドキュメントによると関数テンプレートのオーバーロードに相当して
より特殊化したものが選ばれる。事になっていて問題ないようだけど…
より詳しい人よろしく
351
名前:
デフォルトの名無しさん
:03/07/20 16:35
>>348
関数があいまいてVC7(VC6も?)はエラーがでるから
おしえてあげればいいのでは?
foo<int>(b);
しってたらごめん。
352
名前:
343
:03/07/20 17:09
>>350
なるほど thx!
ってことはVC7はそこラ変がまだまだだったってことでしょうか
>>351
明示的に指定せずに上手くいく方法を探してます。すいません。
353
名前:
デフォルトの名無しさん
:03/07/20 20:41
void func()関数で宣言したclassHogeクラスのオブジェクトcHogeを
グローバル変数に渡したいのですが、どのようにすればよいのでしょうか?
(ローカル変数のスコープをグローバルに変換したい)
自分がやってみたのは以下のとおりです。
おかしな点があったらご指摘頂けないでしょうか。
// グローバル
classHoge* global_ptr_cHoge;
//
void func()
{
classHoge cHoge; // オブジェクト作成
global_ptr_cHoge = &cHoge; // オブジェクトのアドレスをグローバルに格納
test(global_ptr_cHoge); // テスト用関数
}
void test(classHoge* ptr_cHoge)
{
ptr_cHoge->Method();
...
}
354
名前:
デフォルトの名無しさん
:03/07/20 20:52
>>343
VC7.1では上ので通る
355
名前:
デフォルトの名無しさん
:03/07/20 20:56
>>353
funcを抜けてからアクセスしなければ大丈夫
356
名前:
デフォルトの名無しさん
:03/07/20 20:58
>>353
> ローカル変数のスコープをグローバルに変換したい
ここがおかしい。
357
名前:
デフォルトの名無しさん
:03/07/20 20:59
>>353
諦めてグローバルにインスタンス置いと毛
358
名前:
353
:03/07/20 21:11
>>355
func外からも使いたかったんですが、
funcを抜けるとやっぱりまずいですよね・・・
>>356
う、確かに・・・
>>357
はい、そうしときます。
変な質問してしまいすみませんでした。
359
名前:
デフォルトの名無しさん
:03/07/21 03:56
みんなちゃんと理由を説明してやれよ。かわいそうに。
>>353
func を抜けたら func の auto 変数の cHoge は destruct されるから
それ以降に触るのは危険。
というか cHoge を func 内の static にしておけばいいんだけど
それだとやりたい事と意味があっているかどうかはわからん。
360
名前:
デフォルトの名無しさん
:03/07/21 11:40
>>359
かわいそうも何も明らかに普通でない質問だろう。
「変な質問」と自覚していて、それでもやりたいというならば、
それこそその理由を述べるべきだ。
361
名前:
sage
:03/07/21 14:31
//
void func()
{
global_ptr_cHoge = new classHoge; // オブジェクトのアドレスをグローバルに格納
test(global_ptr_cHoge); // テスト用関数
}
362
名前:
デフォルトの名無しさん
:03/07/21 15:09
template <class T> struct bar;
classと指定してるとvc6だと組み込み型の宣言ができない。
組み込み型も宣言したいときはtypenameで指定すればよかったと思われ。
template < typename T> struct bar;
もう解決してるかね?
363
名前:
362
:03/07/21 15:12
上のレスは
>>343
へのレスですー。
2重カキコすまそ。
364
名前:
デフォルトの名無しさん
:03/07/21 15:27
using namespace std;
とネームスペースを一括?指定するのはよくないことなの?
365
名前:
デフォルトの名無しさん
:03/07/21 15:30
>>364
俺は .cpp でやるんなら別にいいと思うが、
.h でやるのはお行儀悪いと思う派。
366
名前:
デフォルトの名無しさん
:03/07/21 15:53
そのことで前揉めてたな
モミモミ
367
名前:
364
:03/07/21 15:57
>>365
それはなぜなんでしょう?
368
名前:
デフォルトの名無しさん
:03/07/21 16:02
>>367
名前のバッティングを防ぐためにわざわざnamespaceに入れたのに、それをあえて同じ名前空間にインポートして無意味にしてしまうusingを、複数のソースファイルで共有されうるヘッダーファイルで使うのは問題だろ?
369
名前:
デフォルトの名無しさん
:03/07/21 16:10
そういう理由なら.cppでやるのも同じように問題な気もするが・・・
(複数のソースファイルから共有されるという点は別だけど)
370
名前:
デフォルトの名無しさん
:03/07/21 16:21
>>369
>複数のソースファイルから共有されるという点は別だけど
これは重要な違いだと思うがね。
まぁ、それでも using が嫌いという人がいるのも分かるし、
usign 使わないのを止(と)めようとは思わんが。
371
名前:
デフォルトの名無しさん
:03/07/21 16:24
>>369
> (複数のソースファイルから共有されるという点は別だけど)
大きなポイントじゃないすか? 衝突の可能性を広い範囲に作っちゃうのは
やっぱ怖いというか、安心できないですよ。
自分(cppファイル)の中だけで「曖昧だ」とかコンパイラに怒られるだけなら
屁でもないですから。
些細なことかもしれないけど、この程度のことで未来に何かを課したくはないです、俺は。
372
名前:
デフォルトの名無しさん
:03/07/21 16:26
using 論争ですが、
ヘッダファイルは公共の場所、
実装ファイルは家の中などのプライベートな場所、
っていう雰囲気があると思う。
家の中で素っ裸になるのは個人の自由だけど、
表でやったらタイーホの予感。
実装で using を使って怠けるのは自由だけど
ヘッダで using を使うのは(明日の自分も含めた)他人への迷惑をかえりみない行為。
373
名前:
デフォルトの名無しさん
:03/07/21 16:40
かわいいおにゃにょこの裸ならお外でも・・・・・ハァハァ
374
名前:
デフォルトの名無しさん
:03/07/21 16:46
>>373
つまりそれは std と boost だけはヘッダで using してもいいという事ですか?
375
名前:
デフォルトの名無しさん
:03/07/21 16:52
>>374
ネタです
376
名前:
デフォルトの名無しさん
:03/07/21 17:09
>>375
いや、「わたしかわいいおにゃにょこだからだいじょうぶね♪」といって
ネカマデブ、ババア、破壊的ブスどもが裸で街を跳梁跋扈する闇の時代がくるという予言です。
377
名前:
デフォルトの名無しさん
:03/07/21 18:07
>破壊的ブス
ワラタ
378
名前:
デフォルトの名無しさん
:03/07/21 18:44
>>369
あほ。全然違うだろ。
379
名前:
378
:03/07/21 18:45
あ、
>>369
の言いたいことが分かった。
普段
#include "hoge.cpp"
とかやってるだろ?1から勉強し直した方がいいぞ。
380
名前:
デフォルトの名無しさん
:03/07/21 19:24
久しぶりだな、半角?くん。
381
名前:
デフォルトの名無しさん
:03/07/21 19:32
>>380
久しぶりだな、半角?くんを半角?くんと呼ぶお前。
つーか半角で?を打つ奴が一人しか居ないと考え
決め付けるお前の浅はかさには閉口してしまうよ?
382
名前:
デフォルトの名無しさん
:03/07/21 19:40
ヴァカが紛れ込んできたようですね
383
名前:
デフォルトの名無しさん
:03/07/21 19:44
どうでもいいけどどこに半角?があるんだ?誤爆?
384
名前:
デフォルトの名無しさん
:03/07/21 19:45
>>2
だな
385
名前:
>>378
:03/07/21 19:47
天然?
386
名前:
デフォルトの名無しさん
:03/07/21 20:19
>>364
スコープ内でusing使ってください。
あと名前のバッティングなんて別に怖いもんでないような?
エラーが出たら一括に名前付けて置換すりゃーいいんだし。
387
名前:
デフォルトの名無しさん
:03/07/21 20:26
>>385
>>369
読んで出直して来い。
>>384
ありがと。
そんな2週間も前のやつにレスしてたのか。
388
名前:
デフォルトの名無しさん
:03/07/21 20:29
??????????
389
名前:
デフォルトの名無しさん
:03/07/21 20:32
>>386
シグネチャがほとんど同じだどエラーが出なくて通ってしまい、
挙動のおかしさ悩むこともある
390
名前:
デフォルトの名無しさん
:03/07/21 21:38
かなりお馬鹿な質問ですが、
C++で作った関数をC言語プログラムに組み込む方法はないでしょうか?
391
名前:
デフォルトの名無しさん
:03/07/21 21:41
絵x手rん ”C"
392
名前:
デフォルトの名無しさん
:03/07/21 22:58
>>390
#if cplusuplus
extern "C"
{
#endif
void MyCPlusPlusFunc(void);
#if cplusuplus
}
#endif
どぞー
393
名前:
デフォルトの名無しさん
:03/07/21 23:30
マングリ返し
394
名前:
デフォルトの名無しさん
:03/07/21 23:52
>>392
__cplusplus をデフォルトでサポートしてくれているコンパイラが殆どなので、
__cplusplus と書いておいた方が楽っぽ。
あと、#ifdef な。
395
名前:
デフォルトの名無しさん
:03/07/21 23:58
>>394
__cplusplusは規格で必要とされている。
396
名前:
デフォルトの名無しさん
:03/07/22 00:44
>>395
あ、ホンマや。
昔は規格外だったと思ったけど。
199711L で定義されてるってことは、
1997 年 11 月の規格で導入されたんだろうな。
397
名前:
デフォルトの名無しさん
:03/07/22 01:14
C++ のソースファイルの拡張子が .cpp とか .cxx とか色々ある歴史的理由を教えて下さい。
398
名前:
デフォルトの名無しさん
:03/07/22 01:48
#ifdef じゃあ
C で
#define __cplusplus (0)
と定義されたらやヴぁくない?
399
名前:
デフォルトの名無しさん
:03/07/22 02:06
>>398
#define __cplusplus (1)
と定義され(ry
400
名前:
デフォルトの名無しさん
:03/07/22 02:14
#ifdef じゃあ
エラー
401
名前:
390
:03/07/22 09:55
#if __cplusplus
#endif
でできました。ありがとうございます。
402
名前:
デフォルトの名無しさん
:03/07/22 13:44
普段Javaですが、都合でC++初めて使っているのですがかなり参ってます。
例えばデストラクタの使用で、
...
Test::~Test(){
printf("%d",0);
}
...
Test *t;
t = new Test();
for(int i=0;i<100;i++) delete(t);
これで0が100回出力されてしまうのが謎です。
tが指しているオブジェクトは1回deleteを行った時点で
破棄されているはずじゃないのでしょうか?
どうして100回デストラクタが働くのでしょう?
403
名前:
_
:03/07/22 13:45
http://homepage.mac.com/hiroyuki44/
404
名前:
デフォルトの名無しさん
:03/07/22 13:52
C++では、ポインタの指しているオブジェクトの生き死にには、
自分で責任を持たないといけない。以上
405
名前:
デフォルトの名無しさん
:03/07/22 14:11
クソ言語だな。おい。
406
名前:
デフォルトの名無しさん
:03/07/22 14:12
( ´,_ゝ`) プッ
407
名前:
デフォルトの名無しさん
:03/07/22 14:16
boost::shared_ptrとかstd::auto_ptrとかあるからその辺使えばdeleteのタイミングをあまり気にする必要なし。
例外対策にはほぼ確実に必要だし。
408
名前:
402
:03/07/22 14:43
>>404
,407
えーと、つまり
こんなふうにdelete100回書いちゃっても問題ないのでしょうか?
それともこの場合たまたま0が100回出力されただけで
2回目以降は偶然って考えのほうがよいでしょうか?
うーん、Javaよりむずい。
409
名前:
デフォルトの名無しさん
:03/07/22 14:45
>>408
> こんなふうにdelete100回書いちゃっても問題ないのでしょうか?
大問題。
410
名前:
デフォルトの名無しさん
:03/07/22 14:50
同じポインタを複数回deleteした場合、どうなっても知らない。ただそれだけだ。
それがいやならdelete後に0でも代入しておくという手もないではないが、
複数回deleteが呼ばれうるという時点で設計が間違ってる。
メンバ変数に触らない非仮想のメンバ関数はthisの値がどうなっていてもエラー
にならないことが多いから動いているように見えただけ。
411
名前:
デフォルトの名無しさん
:03/07/22 14:55
デストラクタを呼ぶ部分はともかく、
メモリ解放処理がなぜエラーにならないか無気味だな。
412
名前:
デフォルトの名無しさん
:03/07/22 16:44
template<typename T>
inline void safe_delete(T*& ptr ){
delete ptr;
ptr = 0;
}
413
名前:
デフォルトの名無しさん
:03/07/22 16:49
オブジェクトは1度目のdeleteで破棄された(無くなった)
↓
デストラクタも無くなった
↓
無くなってるはずのデストラクタが呼ばれる
↓
なんで???
って疑問なんじゃないの?
414
名前:
デフォルトの名無しさん
:03/07/22 17:16
>>413
デストラクタなんぞ、
メンバ変数(仮想関数テーブル含む)使わん限り
普通の関数と大して変わらんじゃんかよ。
415
名前:
402
:03/07/22 17:38
>>413
そういうことです。
>>414
なるほどと思って
別の関数を作ってdeleteした後に呼んでみた、すなわち
for(int a=0;a<10;a++)
delete(t3);
printf("%d\n",t3->test2());
これでもエラー起きないんだね。
deleteってのは振る舞いを未定義にするだけで
解放するって認識はやめたほうがいいのかな・・・
416
名前:
デフォルトの名無しさん
:03/07/22 17:42
>>415
違う
一度削除されたオブジェクトへのアクセスは未定義だから、
プログラムがクラッシュすることもあれば、
突然ディスプレイが火を噴くこともある。
アドレス帳の全メアドに添付ファイルつきメールを送りつけることもある。
もちろん一見うまく行っているように見えることもある。
417
名前:
デフォルトの名無しさん
:03/07/22 17:43
複数回deleteした時の振る舞いが未定義なんじゃないの?
資源の解放という認識でいいと思うけど。
418
名前:
416
:03/07/22 17:45
紛らわしくてスマン
「削除されたオブジェクトへのアクセス」は
>>417
の意味
419
名前:
デフォルトの名無しさん
:03/07/22 17:49
正直、一見何事もないかのように見えるのが一番やっかい。
420
名前:
デフォルトの名無しさん
:03/07/22 17:52
俺は同じメモリを100回deleteしてみる奴始めてみた。
動作を確認してみようという姿勢は悪くは無いが。
421
名前:
デフォルトの名無しさん
:03/07/22 17:56
死体に鞭打つような真似はやめようよ...。> delete 100 回
422
名前:
デフォルトの名無しさん
:03/07/22 17:58
100回加熱殺菌とか
423
名前:
デフォルトの名無しさん
:03/07/22 18:06
ただ、deleteによって対象のポインタがNULLになると勘違いしてる奴は沢山いる。
こういう奴は「NULLをdeleteしても問題ないから」と考えるかもしれない。
424
名前:
デフォルトの名無しさん
:03/07/22 18:13
たまたま開放したままで誰もヒープをいじってないから
残骸のアドレスは空き領域で、再度開放は単にこっそり失敗してるだけだろうな。
デストラクタ自体は単なる関数だからオブジェクトがいなくなっても消えないが。
...もしデストラクタが仮想関数だと少し事情が違うかもしれないが
これも呼び出し時点で対象オブジェクトのクラスが明らかな場合は
最適化で直接呼び出しになってるかもしれんか。
425
名前:
デフォルトの名無しさん
:03/07/22 18:17
template<class T>void del(T *&p){delete p;p=0;return;}
426
名前:
デフォルトの名無しさん
:03/07/22 18:20
メモリ管理嫌ならJava使え。
427
名前:
デフォルトの名無しさん
:03/07/22 18:33
safe_deleteみたいに2回目以降も安全なのと、
2回目以降は例外投げてくれるのとどっちがいい?
前者の方が楽だけど、後者の方が鬱陶しい代わりに
バグの温床を早めに発見できるので。
428
名前:
デフォルトの名無しさん
:03/07/22 18:48
>>427
どっちも使わないのが良い。
ポインタなんて複数箇所から同じオブジェクトを指すんだから、一箇所だけ0クリアしたって焼け石に水。
でもそれをわかった上で使うなら前者がいいと思う。
複数回deleteするかもしれないからこそわざわざsafe_delete使うんだし、それがダメなら自分でチェックすれば良い。
429
名前:
デフォルトの名無しさん
:03/07/22 18:58
早い話、生のポインタなんか使うなってこった
430
名前:
デフォルトの名無しさん
:03/07/22 19:02
>>428
なるほど参考になります。
そうすると下手に自作するより、Boost等のスマートポインタが
うまくやってくれるのに任せるのも安全&&楽ちんで良いですね。
431
名前:
デフォルトの名無しさん
:03/07/22 19:03
結局GCになるのか。
432
名前:
デフォルトの名無しさん
:03/07/22 19:05
ループで集中してdeleteしてるから、無事に動いてるように見えるけど、
delete p;
.
ヒープを扱う処理
.
delete p;
みたいに、間をおいて実行すると、すごいことになる予感。
433
名前:
デフォルトの名無しさん
:03/07/22 19:11
boost::shared_ptrみたいにすでにあるもの使うこともできるし。
機能に不満があったら自作することもできるし。
選択肢が多いのはいいことだと思う。
434
名前:
デフォルトの名無しさん
:03/07/22 20:10
> 選択肢が多いのはいいことだと思う。
勉強用としてはね。
実用としては悪いことになりえる。
435
名前:
デフォルトの名無しさん
:03/07/22 20:40
実用としては選択肢が少ない方が良いとでも?
馬鹿じゃねぇのか?
お前はBASICでも使ってろ。選択肢少ないぞ
436
名前:
デフォルトの名無しさん
:03/07/22 20:50
選択肢が多い方がいいのは応用の部分じゃねーかな。
基礎の部分で多いのは困るぜ。
たとえばライブラリごとに使ってるスマートポインタが違かったりする。
コンテナにしてもSTLがあるにもかかわらずATLやMFCは独自のコンテナを持ってる。
437
名前:
デフォルトの名無しさん
:03/07/22 20:58
C++は設計からしておかしいからね。
クソと言われてもしかたないよ。
438
名前:
デフォルトの名無しさん
:03/07/22 20:59
> コンテナにしてもSTLがあるにもかかわらずATLやMFCは独自のコンテナを持ってる。
ATLは言語に依存しないCOMのため。
MFCはSTLがVC++にまともに搭載される前からのもの。
439
名前:
デフォルトの名無しさん
:03/07/22 21:00
>>435
少ない方がいいとはいわんが
必要ないものはいらん。
440
名前:
デフォルトの名無しさん
:03/07/23 02:01
>>437
どこが?
441
名前:
デフォルトの名無しさん
:03/07/23 02:16
>>440
いつもの荒らしだろ
放置しろよ。
442
名前:
デフォルトの名無しさん
:03/07/23 03:12
>>436
例えば文字列ですかね>応用
C由来 : char*, wchar_t*
C++由来 : std::string, std::wstring
SourcePro由来 : RWCString, RWWString
Xerces由来 : DOMString, XMLString
Xalan由来 : XalanDOMString
ICU由来 : UnicodeString
SGI由来 : std::rope
MFC由来 : CString
443
名前:
デフォルトの名無しさん
:03/07/23 03:22
>>436
VCの不満はマイクロソフトに言え
C++に文句言うのはお門違いだ
444
名前:
hoge
:03/07/23 03:39
(*hoge)->hoge_f
って()で囲んで*つけると普通の構造体参照とどう異なるの?
445
名前:
デフォルトの名無しさん
:03/07/23 04:29
>>444
hogeはstruct tag **hoge
ここまで言えば分かるでしょ。
446
名前:
デフォルトの名無しさん
:03/07/23 05:22
(*hoge).hoge_f
の間違いじゃないのか
447
名前:
hoge
:03/07/23 05:25
>>444
ポインタのポインタを指す場合は()で囲んで*をつけるのですね@@;
ありがと
448
名前:
デフォルトの名無しさん
:03/07/23 05:45
>>446
それならhoge->hoge_fとかくだろ
449
名前:
_
:03/07/23 05:52
http://homepage.mac.com/hiroyuki44/
450
名前:
教えてください
:03/07/23 13:27
VC++で、Waveでデータを波形にし、サンプリング周波数を出すプログラムはできたのですが、
波形の高い部分を見つけ、それをテキストに変換し保存するプログラムが分かりません。
どなたか、教えてくれませんでしょうか?
参考URLなどご存知でしたらお願いします。
せめて、WAVEデータをテキスト変換するプログラムを教えてください。
お願いします。
451
名前:
デフォルトの名無しさん
:03/07/23 13:29
↓次の質問ドゾー
452
名前:
教えてください
:03/07/23 13:33
煽ってないでお願いします。
453
名前:
デフォルトの名無しさん
:03/07/23 13:34
↑次の質問キター
454
名前:
デフォルトの名無しさん
:03/07/23 13:42
>>450
テキストに変換、の意味がわからん
音声認識じゃないだろうし
455
名前:
教えてください
:03/07/23 15:11
>>454
音声認識です。
456
名前:
デフォルトの名無しさん
:03/07/23 15:17
音声認識ソフト作ってる会社に金払って教えてもらえ
457
名前:
デフォルトの名無しさん
:03/07/23 15:43
音声認識ならMicrosoftのSpeechエンジンが無料で使えるぞ
458
名前:
デフォルトの名無しさん
:03/07/24 00:09
void printf2(const char *str, ...)
{
printf(str, ...);
}
可変個数で受け取った引数を、さらに別の関数の可変個数の引数として
渡すことってできますか? ↑のような感じに。
459
名前:
デフォルトの名無しさん
:03/07/24 00:27
>>458
void myprintf( const char* str, va_list args ) { ... }
void printf2(const char *str, ...)
{
va_list args;
va_start( args, str );
myprintf(str, args);
va_end( args );
}
とかなんとか。標準(だったけ?)ライブラリにvprintf関数
ってのがあるから、そのソース見るとかすればわかると思う。
460
名前:
459
:03/07/24 00:28
あー、つまりその、printf に対する vprintf みたいなのが用意されてれば、
そっちに va_list を渡せばいい。そういうのが用意されてないと、無理。
461
名前:
デフォルトの名無しさん
:03/07/24 00:56
通常は反則技だが。
__declspec(naked)
void printf2(const char* str, ...)
{
__asm {
jmp printf
}
}
462
名前:
163
:03/07/24 01:09
あれ(
>>163
)から幾度か規格を漁るうちに、また妙な記述を見つけました。
offsetof@cstddef が引数として受け取る型は、
POD structure か、 POD union だと規格に書かれていました。(18.1 -5-)
やっぱりC++の規格は、非POD型オブジェクトについて何か想像を絶するメモリレイアウトを受け入れる余地を
意図的に残しているのだろうか?誰か知らないですか?
463
名前:
hoge
:03/07/24 03:54
if ( au & kddi )
の&ってどういう処理?
464
名前:
デフォルトの名無しさん
:03/07/24 03:55
byってゆー処理
465
名前:
デフォルトの名無しさん
:03/07/24 03:56
>>463
ビットAND
466
名前:
デフォルトの名無しさん
:03/07/24 04:01
C++ 始めたばかりだけど、std::string spaces(10, ' '); って構文はどうなのよ?
C では () が付くと関数というルールがあると思うけど、上のはどう解釈すれば良いのかな?
467
名前:
デフォルトの名無しさん
:03/07/24 04:09
コンストラクタに引数を渡しているだけでは・・・
468
名前:
デフォルトの名無しさん
:03/07/24 04:34
コンストラクタとクラス名は違っても良いんだ? なるほど。
コンストラクタが「インスタンス名()」って変なの。
469
名前:
hoge
:03/07/24 04:39
>>465
ありがと^^
ちなみに sig = (num < 0)
はnumが0未満だったらsigに代入するって事?
470
名前:
hoge
:03/07/24 04:41
もひとつ^^;
ハイビットセット処理って何?
471
名前:
_
:03/07/24 04:43
http://homepage.mac.com/hiroyuki44/hankaku10.html
472
名前:
デフォルトの名無しさん
:03/07/24 05:01
>>468
え??
std::string型のspacesを定義してコンストラクタには(10,' ')を渡すんだと思っていたけど違うの??
473
名前:
デフォルトの名無しさん
:03/07/24 05:28
>472
下のコードの sharp(10, '#'); の部分ってどう理解したら良いのやら検討が付きません。
sharp は変数名なのに引き数を取っている?
#include <iostream>
#include <string>
int main()
std::string sharp(10, '#');
std::cout << sharp << std::endl;
return 0;
}
474
名前:
デフォルトの名無しさん
:03/07/24 05:29
編集中に int main() の次の行の { が抜けてしまいました。
475
名前:
デフォルトの名無しさん
:03/07/24 05:42
>>473
そういう仕様だからしかたないんだよね・・・・
どうしても気になるならstd::string sharp=std::string(10, '#');と書きなよ。
std::string sharp(10, '#'); は上記の省略形。
476
名前:
デフォルトの名無しさん
:03/07/24 05:42
>>473
コンストラクタはその型のインスタンスが構築される際に働く関数で、
変数の定義時に変数名の右に引数を書いて渡すのは、まぁ、そういう決まりってこと。
ちなみにintとかの組み込み型でも
int hoge(100);
っていう書き方ができるよ。この場合はint型の変数hogeを100で初期化してる。
477
名前:
476
:03/07/24 05:43
かぶって候
478
名前:
デフォルトの名無しさん
:03/07/24 06:02
>>475-477
レスありがとうございます。
今まで色々な言語を見てきましたが、難解ですね。ある変数を初期化、代入するのには型、変数名、
初期値があれば良いと言うのは分かりますが、「型 変数名(初期値)」という構文は脳が異次元に
ワープしそうです。
479
名前:
デフォルトの名無しさん
:03/07/24 07:29
>>478
それのどこが難解なんだよ。本当に色々な言語を見てきたのか?
つーか難解さで言えば関数ポインタ型の変数の方がもっと上だろ。
480
名前:
デフォルトの名無しさん
:03/07/24 08:01
>>478
× 型名 変数名(初期値);
○ 型名 変数名(コンストラクタへ渡す引数のリスト);
だ。あと、std::string(10, '#') なんかも
型名(コンストラクタへ渡す引数のリスト)
とそのまんまに解釈すべき文であって
コンストラクタ関数(コンストラクタへ渡す引数のリスト)
という意味ではないので誤解せん方がよい。
() が関数呼び出し、という固定観念から離れた方がいいと思うが、
まあ、関数と紛らわしいってのはその通りで、
string s( istream_iterator<char>(cin), istream_iterator<char>() );
と書いて変数定義をしたつもりが関数の宣言とみなされて困ったりはするのだが。
481
名前:
デフォルトの名無しさん
:03/07/24 08:18
コンストラクタも関数なんだから、()は関数呼び出しという認識でも、つじつまは合う?
482
名前:
デフォルトの名無しさん
:03/07/24 09:36
関数の戻り値を参照で返すとき、関数内でreturn Class1(arg1, arg2);という
具合に引数つきコンストラクタで初期化したクラスで値を返すとします。
このとき、Class1の実体が保持されているタイミングはどこまでなのでしょうか。
483
名前:
デフォルトの名無しさん
:03/07/24 10:32
>>482
関数内まで。
というか、エラーも警告もなしにコンパイル通る?
484
名前:
デフォルトの名無しさん
:03/07/24 16:46
>>483
警告を出してくれないコンパイラも困りものだが、
これでエラーがでたらそれはコンパイラのバグ。
485
名前:
デフォルトの名無しさん
:03/07/24 17:31
>>484
非 const の場合、g++ だとエラーになったよ。
486
名前:
デフォルトの名無しさん
:03/07/24 20:08
>>485
確かにこの場合、非 const だとエラーにはなるだろうが、
それは右辺値・左辺値の問題なのでオブジェクトの寿命の問題とはまた別。
487
名前:
デフォルトの名無しさん
:03/07/24 20:51
今、ファイルへ書き込みするプログラム作ってるんだけど、
複数あるクラスのデータを、基本クラスのtypeプロパティを読み込んで
switchで派生クラスのデータをそれぞれ書いてるんだけど、
なんか、あまり綺麗じゃないんです。
ちなみに、基本クラスから派生しているクラスは5種類くらいあって
中身がそれぞれ違うんで、switchみたいなの使わないといけないんですが
なんか他にいい方法ないですかね?
488
名前:
_
:03/07/24 20:55
http://homepage.mac.com/hiroyuki44/
489
名前:
デフォルトの名無しさん
:03/07/24 21:02
>>487
元クラスを弄れないと仮定して、MixJなら楽勝なんだが…Visitorかな?
490
名前:
デフォルトの名無しさん
:03/07/24 21:25
Siralizableとかいうインターフェースを保存したいクラスに実装してそれぞれでSirializeをオーバーライドしたら?
491
名前:
デフォルトの名無しさん
:03/07/24 21:34
>>489
とりあえず、Visitorで検索したけど、
これで、いいんですかね?
http://member.nifty.ne.jp/yamazaki/doc/cpp_design_pattern.html#Visitor
>>490
それ、書き込んだ後に思いつきました。
とりあえずやってみます。
492
名前:
デフォルトの名無しさん
:03/07/25 00:18
>>486
いや、だから寿命の話じゃなくて
エラーがでないってことはないよってことで...。
493
名前:
hoge
:03/07/25 01:52
malloc()で動的にメモリ領域を確保して
構造体を格納してその後にprintfで内容を出力、
実行するとprintfの所で
Segmentation fault (core dumped)
gdbでデバッグしてみると
#0 0x610ba041 in strlen () from /usr/bin/cygwin1.dll
で落ちている...
strlenで落ちる(しかもprintf)のはどうしてでしょうか?
494
名前:
デフォルトの名無しさん
:03/07/25 02:02
>>493
訳が分からんが、普通strlen()で落ちるのは'\0'がないからでは?
495
名前:
hoge
:03/07/25 03:29
>>494
返答ありがとう^^
調べたのですが多分\0がないからと思います。
なぜならcharに数値を代入しているみたいです(こんな事ありえますか?)
496
名前:
デフォルトの名無しさん
:03/07/25 03:30
ワケワカラン。
一体どんな状況なんだ?
497
名前:
hoge
:03/07/25 03:45
new->s_pt = new->s_ft + BYTE_LEN;
charで定義されたs_ptに数値が代入されている恐怖の構造体みたいっす
最初は構造体の宣言に沿ってprintfの書式を決定していたのですが...w
498
名前:
デフォルトの名無しさん
:03/07/25 03:55
char は整数型だから、普通の整数値として扱うこともあるが。
まぁ、その場合は普通 singed か unsigned か付けるけど、
0 〜 127 しか扱わんなら問題になることはまれだと思う。
それにこれは C じゃないのか?
499
名前:
hoge
:03/07/25 03:59
>>494
ゴメ C言語なら俺に聞け! Part 62 が適当でしたね^^;;
charの謎が解けました^^;ありがと
500
名前:
デフォルトの名無しさん
:03/07/25 09:56
500
■過去ログ置き場に戻る■
1-
前250
次250
最新50
DAT2HTML
0.33f Converted.