[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 04/01 07:48 / Filesize : 131 KB / Number-of Response : 559
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


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

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



1 名前:デフォルトの名無しさん mailto:sage [2008/07/16(水) 22:39:18 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.56【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1215278693/

【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

◆ソースのインデントについて
半角やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのが最も良いですが、
直接貼るのであれば、全角空白か に置換しておくことをお勧めします。

196 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 21:25:07 ]
>>195
Linux以外のほぼすべてのUNIX。
すくなくとも、Solaris FreeBSD NetBSDはUnicodeではなかったはず。




197 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 22:00:16 ]
そうなのか。dクス

198 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 22:02:46 ]
LinuxをUNIXと言うと基地外が来襲するので
ちゃんとUNIXライクOSと言いましょう

199 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 22:11:08 ]
wchar_tマジ使えなさすぎワロタ
ml.tietew.jp/cppll/cppll/article/862

200 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 22:40:13 ]
その辺に載ってる話はさすがに古くねえか?
gcc 2.xだろ?

201 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 22:55:17 ]
gccのwchar_tは昔からうんこ
あまりにも有名すぎる話

202 名前:デフォルトの名無しさん mailto:sage [2008/07/22(火) 23:37:26 ]
>>201
いやその、今のgccはinput-charsetだのexec-charsetだのwide-exec-charsetだの
指定できるだろ?

203 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 01:49:03 ]

*i |= 3;

はちゃんと

*i = *i | 3;

に展開されるのでしょうか?


204 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 02:26:54 ]
いいえ、前者と後者では意味が違います。



205 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 02:32:22 ]
>>203
「展開される」の意味が分からない

Cだと結果は動作は等しくなる
C++だとoperatorのオーバーロードがあるのでなんともいえない

206 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 10:02:00 ]
class test {
string* p;
public:
test() { p = new string; }
~test() { delete p;}
}

main() {
test obj1;
test obj2 = obj1;
}

2度目のdeleteにてセグメンテーション違反で落ちるコードです
教科書ではコピーコンストラクタを上書きして
ポインタの指す先までコピーするようにしてるのですが
delete時にチェックする方法はあるんでしょうか?
実用性は考えていませんが、興味があります

環境:
Linux kernel 2.6-686
GNU C++ compiler 4.1.1

207 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 10:07:15 ]
ローカル変数とは定義された順にスタックに積まれるのですか?

208 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 10:13:42 ]
>>206
obj2.pはobj1.pと同じだから落ちて当たり前。
何がしたいのか分からないけど、ポインタにNULLポインタを入れておけば
それがdeleteされても問題なく動く。

209 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 10:13:50 ]
>>206
> delete時にチェックする方法はあるんでしょうか?

参照カウンタをどこかに持つとか。



210 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 10:18:20 ]
あー、参照カウンタにしても、けっきょくコピーコンストラクタをオー
バーライドしなきゃいけないか。





211 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 10:25:16 ]
>>208
どこでNULLをセットすればいいですか?

>>209
なるべく簡単な方法がいいんですよね

catchしちゃえばいいのかな
このアドレスは使っちゃ駄目みたいなのは
カーネルに聞けば教えてくれるのかなと思ったんですが

212 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 10:33:33 ]
>>206
あくまでチェックしたいってことなら、方法は無い。
ヌルをセットするとかして、とにかく落ちないようにするなら auto_ptr でも使っとくのが簡単。

#include <memory>
#include <string>
using std::string;
using std::auto_ptr;

class test {
auto_ptr<string> p;
public:
test() : p(new string) {}
};

int main() {
test obj1;
test obj2 = obj1;
}

213 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 11:37:38 ]
>>207
規格ではスタックが使われるのかすら決まってなかった気がする

214 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 12:39:32 ]
>>211
string*ではなくstringをメンバに持たせる



215 名前:デフォルトの名無しさん [2008/07/23(水) 16:25:27 ]
class hoge{
private:
int fuga;
public:
void setfuga(int a){ fuga = a; }
int getfuga(){ return fuga; }
};

class foo{
private:
std::vector<hoge> var;
public:
void sethoge(hoge hage){ var.push_back(hage); }
std::vector<hoge> getvar(){ return var; }
};

int main(){
foo foo0;
hoge hoge0;
hoge0.setfuga(1);
foo0.sethoge(hoge0);

std::vector<hoge>::iterator itr;
itr = foo0.getvar().begin();
std::cout << foo0.getvar().at(0).getfuga() << std::endl;
std::cout << (*itr).getfuga();
return 0;
}
これを実行すると、一つ目のcoutは正常に出力(1)されますが、二つ目はでたらめな値が出ます。
itr = foo0.getvar().begin()はfoo0.getvar().at(0)を指すiteratorだと思うので、同じ結果になると
思っているのですが…。どなたかお教えいただけると助かります。

216 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 16:35:26 ]
>itr = foo0.getvar().begin();

getvarの戻り値はfoo0.varそのものではなくfoo0.varの一時的なコピーで、次の文に移る前には破棄される
getvarはfoo0.varのコピーを返すのではなくfoo0.varへの参照を返す必要がある

217 名前:デフォルトの名無しさん [2008/07/23(水) 16:38:55 ]
>>216
その通りでした。ちょうど思いついたところでした。
すみません、どうもありがとうございます。

218 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 20:39:07 ]
HOGEという構造体がtypedefされているとします。


HOGE *hoge;と宣言します。


void function(HOGE *hoge){

}という関数に

function(hoge)と渡すと参照渡しになってますか?

219 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 20:42:42 ]
>>218
それはC++でいうところの参照ではありません

220 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 20:44:26 ]
アドレス私ですか?

221 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 20:46:44 ]


222 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 20:47:38 ]
アドレス渡しですか?の間違いです

223 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 21:01:10 ]
「自分宛のレスですか?」という意味だと勘違いしたのは、
俺だけじゃないはず。

224 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 21:33:45 ]
foo(HOGE fuga){ }
bar(HOGE* pFuga){ }
baz(HOGE& fuga){ }

func()
{
HOGE hoge;
HOGE *pHoge;

// 値渡し
foo(hoge);
// ポインタ渡し(アドレス渡し)
bar(pHoge);
// 参照渡し
baz(hoge);
}




225 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 21:40:34 ]
foo(HOGE fuga)
foo(HOGE &fuga)

HOGE hoge;
foo(hoge);

この場合どっちが優先されますか?

226 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 21:43:00 ]
>>225
自分でコンパイルしてみては?

227 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 21:44:40 ]
自分で試してください。

俺は試しました。VC++2005EE

XXX.cpp(19) : error C2668: 'foo' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照)
XXX.cpp(11): 'void foo(HOGE &)' の可能性があります。
XXX.cpp(7): または 'void foo(HOGE)'
引数リスト '(HOGE)' を一致させようとしているとき

228 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 21:44:44 ]
もし環境依存だったら自分で試しただけでは分からないし

229 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 21:50:02 ]
それは試してうまくいった後に質問すべきこと。

230 名前:デフォルトの名無しさん [2008/07/23(水) 22:08:24 ]
g++でプリコンパイル済みヘッダが使えないって聞いたんだが、
stdafx.hみたいに一つのヘッダファイルでSTLやboostとかのヘッダ
全部読み込むのはやめたほうがいい?


231 名前:デフォルトの名無しさん mailto:sage [2008/07/23(水) 22:44:37 ]
いつのg++の話?

232 名前:デフォルトの名無しさん [2008/07/23(水) 23:54:09 ]
>>224
225は自分じゃないです。

ポインタ渡しした場合はbar関数の中で値を書き換えても、元には影響ないんですか?

233 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 00:03:05 ]
>>232
ポインタを引数に指定しないとだめか、そうでないかの違いで、影響あることには変わりないよ

234 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 00:10:51 ]
225は違う人だったのか…

ポインタ渡しは影響する
参照渡しも影響する
値渡しだけは影響しない



235 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 00:21:32 ]
クラスは参照型なのでゴニョゴニョ

236 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 00:23:12 ]
>>232
bar(HOGE* pFuga){
  *pFuga = ...; //影響する
  pFuga = ...; //影響しない
}

237 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 02:02:44 ]
>>230
そういう理由もあるだろうし、依存関係は最小限にしたほうがいいと思うよ。

g++ でもプリコンパイル済みヘッダ自体は使えたような気がする。使い方が
全然違ったはずだけど。

238 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 09:04:36 ]
>>235
嘘をつくな

239 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 13:36:21 ]
あれ?
クラスもコピーコンストラクタ呼ばれて値渡しされるよね?

240 名前:デフォルトの名無しさん [2008/07/24(木) 13:39:58 ]
コピーコンストラクタ呼ばれて値渡しされるし、逆にコピーコンストラクタが定義されていないと
コンパイルできないはず

241 名前:240 [2008/07/24(木) 13:42:25 ]
値渡しの話だよね?

242 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 13:43:59 ]
コピーコンストラクタがなければ勝手に丸ごとコピーします。
でないと、struct A a, b; a = b;というC由来のコードがコンパイルできなくなってしまう。

243 名前:240 [2008/07/24(木) 13:44:40 ]
あ、そっか、そうだね、失礼

244 名前:240 [2008/07/24(木) 13:47:05 ]
あ、よくがんがえたら、クラスのメンバーに、コピーコンストラクタが定義されていないオブジェクトが含まれている時と
勘違いしてた。
自分がよくコンパイルエラー出すもんで。。w



245 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 13:52:09 ]
実際
中間インスタンス生成+コピーコンストラクタ呼んだ後は 参照でわたしてる?

呼び出し元のインスタンスには影響を与えないけど、スタックに実体を積んでいるわけではない
みたいな構造

246 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 13:53:44 ]
それぞれ想定している状況が違っている悪寒。

247 名前:デフォルトの名無しさん [2008/07/24(木) 13:55:27 ]
VC2008 VC6 BCC MinGW
でboostいれたいんですけど
バイナリ配布しているVC2008しか成功しません
1.35のそれぞれのバイナリ置いてある所無いですか?

248 名前:デフォルトの名無しさん [2008/07/24(木) 14:17:41 ]
www.boost.org/development/tests/release-1_35_0/developer/summary.html

boostてdrwinとvc7以上で主に動くんですね borlandはかなり駄目ですね

249 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 14:39:09 ]
darwinってmacのことだぞ

250 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 19:59:10 ]

 boost::regex で,置換する時に置換フォーマットが $10 だと 10 番目のキャプチャ要素に置換されるんだけれど,
これを一番目のキャプチャ要素 $1 + 0 にするにはどうしたらいいの?

251 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 20:00:54 ]
>>250
regex を二回呼べばいいんでは?

252 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 20:09:39 ]

すいません 2 回呼ぶと言うのはどういう意味でしょうか?


253 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 20:23:33 ]
>>250
簡単な例をplz

254 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 20:29:02 ]
${1}0でいけたような気がしたけど、どうだったかなあ



255 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 20:31:59 ]
1.35のregexでいまためしてみた。
"\\10"で大丈夫。sed format string syntaxってやつだ。
"${1}0"はだめ。

#include <iostream>
#include <string>
#include <boost/regex.hpp>
int main()
{
    boost::regex re("(.)(.)(.)(.)(.)(.)(.)(.)(.)(.).*");
    std::string s ="abcdefghijklmn";
    std::cout << boost::regex_replace(s, re, "\\10") << std::endl;
    return 0;
}

256 名前:デフォルトの名無しさん mailto:sage [2008/07/24(木) 20:34:49 ]
そういう意味か!

257 名前:250 mailto:sage [2008/07/24(木) 20:38:51 ]
>>255
ありがとう!それでうまくいきました.

258 名前:デフォルトの名無しさん [2008/07/25(金) 10:23:37 ]
boost_serializationを画面やメモリに出力したいのですが教えて下さい
test_classは別に定義してあるとします。これだとファイル出力です

#include <fstream>
#include <string>

int main()
{
std::ofstream fp("XXX.xml");
boost::archive::xml_oarchive oarchive(fp);

test_class Z;
Z.a = 22; Z.b = 7;

oarchive << boost::serialization::make_nvp("Root", Z);

}



259 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 10:34:45 ]
>>258
よくわからんが
ofstreamのかわりにcoutやsstreamを使えばいいだけなんじゃないの?

260 名前:デフォルトの名無しさん [2008/07/25(金) 10:35:02 ]
追記

型 const boost::serialization::nvp<T>の出力方法がわかればいいのですが

261 名前:デフォルトの名無しさん [2008/07/25(金) 10:36:58 ]
トンクス これでいけました!

xml_oarchive oarchive(fp); → xml_oarchive oarchive(cout);

262 名前:デフォルトの名無しさん [2008/07/25(金) 10:41:06 ]
メモリに格納したいのでstringにしたらエラーでました。 メモリに入れる良い方法ありませんか?

string s;
boost::archive::xml_oarchive oarchive(s);

1番目の引数を 'std::string' から 'std::ostream &' に変換できません。

263 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 10:46:46 ]
>>262
つ[stringstream]

264 名前:デフォルトの名無しさん [2008/07/25(金) 10:50:32 ]
トンクス



265 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 13:06:02 ]
参照を使うべきかポインタを使うべきか悩んでいるのですが、
参照なんて使わない!もしくはできる限り全て参照を使う!って方いますか?
どうもポインタと参照の違いが分かりません(使いどころとして)

266 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 13:46:14 ]
>>265
C++では、ポインタを使わないといけないケース以外はポインタを使わない。
使うとしても、大抵はイテレータと言う形で使っている。
必要に迫られれば、ポインタを使うこと自体は吝かではない。

267 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 13:50:08 ]
C++だと関数にヌル終端文字列を渡すときも、const char * とか使わず、
全て const char & とか const std::string & を使うの?

268 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 13:51:13 ]
const char & を渡してどーすんだ

269 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 13:58:18 ]
俺は、参照を使わざるを得ないときと、値渡しの代わりとしてコピーのコストを抑えるためにしか、参照を使ってないな
それ以外はポインタ

270 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 14:08:14 ]
void test(const char& s){
  if(&s==NULL){
    std::cout << "(NULL)" << std::endl;
  }
  else{
    std::cout << &s << std::endl;
  }
}
int main(){
  test(*"aaa");
  test(*static_cast<const char*>(NULL));
  return 0;
}
--結果---
aaa
(NULL)


扱えないことはない。
でもまぁ正直言って、これはないw

271 名前:265 mailto:sage [2008/07/25(金) 14:12:35 ]
値渡しのコピーを省くためなら、参照でなくともポインタでできそうですけど、
それをわざと参照でやる理由はなんでしょう?
c++まだ勉強中で、ざっと見た感じ、以下のようなものしか有用性はないような気がしてます。
ポインタでの煩わしい明示を省ける、視覚的に区別する以外のメリットはあるのでしょうか?

int n;
int &func();

void main()
{
    int i = 0;
    func() = i;
}

int &func()
{
    return n;
}

272 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 14:29:06 ]
ポインタは参照と違ってNULLを渡すことができるらしいよ。
参照はポインタと違っていい一般保護例外を起こすようなアドレスを排除できるらしいよ。

273 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 14:35:22 ]
>>271
少なくともread-onlyな引数を、効率のためにconst参照渡しがしたいケースなら、
素直にreference使ったほうが便利だよ

>>272の言うような問題もないし、呼ぶ側としても
ただの値渡しと同じように記述できて、型変換や何かが必要な場合もコンパイラが面倒
見てくれるからな

ユーザ定義演算子などでは、意図した記法を実現したければ、
事実上参照以外に選択肢が無いこともある

274 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 14:36:21 ]
>>272
やってやれんことはないな
void hoge(double &d) { }
hoge(*(double *)NULL);
hoge(*(double *)123);




275 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 14:37:23 ]
>>271
const参照になるけど、
・良いかどうかは別にして、コンストラクタの暗黙呼び出しが使える。
・一時オブジェクトが渡せる。
という利点はある。

struct IntX {
  int n;
  IntX():n(0){}
  IntX(int argn):n(argn){}
};
void test(const IntX& a){
  std::cout << a.n << std::endl;
}
void test2(const IntX* a){
  std::cout << a->n << std::endl;
}
int main(){
  test(IntX());
  test(10);
  //test2(&IntX(20)); //左辺値でないのでコンパイル不可
  return 0;
}

あと、>>272がツッコミ入れてくれた通り、
>>270で書いた *static_cast<const char*>(NULL) みたいなネタは
実際のプログラムでやったら(無効な参照を作ったら)駄目だからね。

276 名前:265 mailto:sage [2008/07/25(金) 14:47:48 ]
ふむふむ、なるほど。よく分かりません\(^o^)/
もう少し理解を深めてから出直したいと思います。

277 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 14:48:21 ]
このスレか別のスレかわからないが最近同じネタをやってて、
参照が追加になったのは演算子のオーバーロードやコピーコンストラクタで
必要に迫られたからということらしい。
通常では戻り値はいいとして引数で使うと変数の変化が追いにくくなるので
多用はしないということだった。

278 名前:265 mailto:sage [2008/07/25(金) 14:55:17 ]
C++の機能拡張に合わせて追加された、ということでしょうか。
同じネタが上がるということは、同じ疑問を持つ人がいるということですかね。
オーバーロードやコピーコンストラクタのあたりも見直してみます。

279 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 14:56:12 ]
>>274
その場合は呼び出し元に問題があることが確定するのが、参照にしとく利点になるかな?
ポインタだと、渡された側でヌルチェックすべきかどうか気になってしまう。

280 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 14:57:23 ]
>>276
まだ勉強中って書いてあったね、ごめん。
慣れるまで、参照でなければならない箇所以外は
ポインタで良いと思うよ。

たぶん、経験が自然に教えてくれる。

281 名前:デフォルトの名無しさん [2008/07/25(金) 14:57:42 ]
hoge(*(double *)NULL);

こんなん落ちないの?

282 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 15:01:25 ]
落ちると思って良い。
ちなみに言語規約違反な。

283 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 15:04:08 ]
間違った。規約じゃなくて規格。

284 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 15:08:09 ]
C++でC言語のキャスト使うのやめれ



285 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 15:08:49 ]
そういうときは未定義動作っていうんだ。コンパイルはできちゃうからね。

286 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 15:13:29 ]
#define NULL reinterpret_cast<void*>(0)

287 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 17:21:06 ]
BCCでの質問です。
ファイル間のインクルードの関係が以下の時、変更してないファイルも毎回コンパイルされるんですが回避策ってありますか?

A.h
B.h(include A.h)
A.cpp(include A.h)
B.cpp(include A.h,B.h)

オナがいします。

288 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 17:22:52 ]
>>287
ヘッダを変更しなければいいだけじゃないの?

289 名前:デフォルトの名無しさん [2008/07/25(金) 17:31:40 ]
C言語勉強中なのですが、理由が知りたいです。
簡単なプログラムなのですが、回答よろしくお願いします

void hogefunc(char *);

void main()
{
char a[256] = "abc 0001";

hogefunc(a);
}

void hogefunc(char *tmp)
{
char b[256];

strcpy(b,tmp);

}
//////////////
デバッグを行うと、bの中身が"abc"のみでaの中身"abc 0001"が文字列コピーできていません。
予想だと、aの中身とbの中身は同じになると思ってました。なぜ0001が切られたのでしょうか?
よろしくお願いします

290 名前:289 mailto:sage [2008/07/25(金) 17:34:42 ]
全て打つ前に転送してしまいました・・
このプログラムの場合、aの中身とbの中身を同じにするにはどうすればいいでしょうか?

291 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 17:34:57 ]
そんなはずがない。なんかの見間違いなんじゃないか

292 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 17:35:57 ]
void hogefunc(char *);

void main()
{
char a[256] = "abc 0001";

hogefunc(a);
}

void hogefunc(char *tmp)
{
char b[256];

strcpy(b,tmp);

printf("%s",b);

}

で試したけどちゃんと表示されてました

293 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 17:35:58 ]
>>289>>290
んなこたぁーない
もう少しデバッグのステップ続けてみ

294 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 17:36:21 ]
>>287
どうやってコンパイルしてる?
make 使ってるのなら makefile 見せてみ



295 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 17:37:42 ]

"abc 0001"
   ^ 実はこれが\0というオチを予想

296 名前:デフォルトの名無しさん mailto:sage [2008/07/25(金) 19:01:40 ]
>>288,294
どうやらファイル名が長すぎるのが原因のようでした。
最小限の再現作ってたらincludeのみのヘッダファイルが二個だけになったので^^;






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

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

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