- 1 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 11:02:46 ]
- スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。
スレを勃てるまでもないC/C++の質問はここで pc11.2ch.net/test/read.cgi/tech/1167476845/
- 656 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 13:03:43 ]
- >>655
stringは一行(というか可変長な文字列ひとつ)を扱うクラス。 stringの配列で、行ごとに扱うというのは別に間違ってないよ。 あと、reserveは使うとpush_backが早くなるかもしれないけど、 使わなくてもいいという代物。 reserveしないとエラーが出るというのは、別のとこに原因があるはず
- 657 名前:650 [2007/08/01(水) 13:19:33 ]
- >>656さん
ありがとうございます。 原因は、Scenario[0]を出力しようとしているところにありました。 そして、string型の要素が入ってるくせに、.c_str()が使えないようです。 諦めて、string Scenario[500]; にしてコードを適切に変えたら、 やりたかったこと(1行単位で格納)そのものは出来ました。 やはり、stringの考え方そのものは正しかったようです。 それはそれで嬉しいのですが、今度はvectorの使い方を理解出来ていないと いうことが発覚して、非常に悔しいです。 改めて、また全く別の質問をさせてください。 vector<string> a(10); と宣言しても、a. でリストに出てくるメソッドはvectorのもので、stringの .c_str()等が 使えないのはどうしてでしょうか? また、a[0].にいたっては、リストすら表示されません。 a[0]にはstring型のデータが格納されていると考えるのは間違っていますか? これが、string b[10];なら、b[0].c_str();が使えることは確認済みです。 てっきり、同じように扱える物だと思っていましたが、どうやら違うようです。 宜しくお願いします(涙)
- 658 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 13:38:24 ]
- いや、そんな感じだぞ。
vector<string> a(10);とすると、aは10個要素を持った状態になる。 a[0].でstringのメンバが出てこないのは、単にエディタが阿呆なだけだから諦めろ。
- 659 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 13:39:13 ]
- VC2005だとちゃんと表示されるぜ
- 660 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 14:06:47 ]
- VC2003だと所々怪しい。
ポインタと配列が組み合わさるとインテリセンスが働かないことがある。 VC6を使ってたときはもっとひどかった。
- 661 名前:650 [2007/08/01(水) 14:32:24 ]
- 皆さん、本当にありがとうございます。
泥沼に入り込んだような絶望的状況の中、優しさに泣けてきます。 コーディング専用に使ってる古いノーパソの方はVC++2002でしたので、 メインPCに入っているVC++2005ExpressEditionのほうにソースコード移して、プロジェクト作り直してみました。 (2002と2005で互換性無いみたいで、余計なトラブル防ぐためです) すると……出ます! vector<string> a; a.resize(500); で、 a[0]にちゃんとstringのメソッドが出ます! やったぜ! 喜び勇んでデバッグビルド。 ……LNK4217やらLNK2019やらLNK1120やら出まくりやがります……(´;ω;`) どうやら、vectorを使うと出るっぽ……(コメントアウトすると出ない とりあえずエラーコードを全部ググってみたのですが、正直、専門用語連打で今ひとつ原因が理解できていません。 もうちょっと格闘してみます。
- 662 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 14:35:53 ]
- #include <vector.h> とかやってるってオチはないだろうね
- 663 名前:650 [2007/08/01(水) 14:52:27 ]
- >>662さん
ちゃんと #include "string" #include "vector" にしてます。 昼飯抜きでやってたので、いまちょっとラーメン食ってます。 今日は有給取ってまとまった時間があるんで頑張ります(^^)
- 664 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 15:00:07 ]
- ランタイムライブラリの設定がおかしくなっているような気がする。
- 665 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 15:44:18 ]
- C++のソースを他の言語に移植しているのですが、ちょっとこまったことがありました。
class Hoge { Hoge(); virtual ~Hoge(); } といった、クラスがある場合、 ソース中、 Hoge hoge; として、動的生成ではなく、静的に宣言?した場合、 デストラクタ(~Hoge);は、スコープから外れると自動で呼ばれるものなのでしょうか? 自動で、呼ばれない言語に移植しているいじっているもので(Delphi)
- 666 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 15:45:22 ]
- >>665
試してみればわかると思うけど、YES
- 667 名前:665 [2007/08/01(水) 15:45:28 ]
- 途中で、送信してしまいました。
自動で、静的な構造体の場合、デストラクタが呼ばれない言語に移植しているもので(Delphi)、 その場合は、手動でデストラクタを呼び出す必要があるということになりますよね。
- 668 名前:650 [2007/08/01(水) 15:46:10 ]
- いろいろ確認しましたが、やはり、vectorを使用するとリンカエラーが出るようです。
vector<int> i; と宣言して未使用のままでも、エラーが出ます。 stringは問題なく使えます。 他のSTLについては、そもそも使い方をまだ学習していないのでインクルードすらしてません。 ノートの方でエラー出ないってのが不思議です…… どなたか、原因が分かる方いらっしゃいますか? >>664 設定を戻したいのですが、どのようにしたら元に戻せるんでしょうか? 再配布用のVC++2005 SP1ランタイムは見付けましたが、多分、再配布用じゃないですよね(´・ω・`)
- 669 名前:665 [2007/08/01(水) 15:49:27 ]
- >>666
サンクスです。 こちらにも書いてありました。 C++編(言語解説) 第7章 コンストラクタとデストラクタ www.geocities.jp/ky_webid/cpp/language/007.html newしない場合は、スコープ外れるときに自動で呼ばれるのですね。 newした場合は、deleteするときに呼ばれる、と・・・。
- 670 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 15:54:29 ]
- >>668
プロジェクトの設定でC/C++→コード生成で ランタイムライブラリの設定をDLLからスタティックリンクライブラリにしてみたらどう?
- 671 名前:650/668 [2007/08/01(水) 16:10:06 ]
- >>670さん
ありがとうございます。 プロパティ→C/C++→コード生成→ランタイムライブラリ を見てみたところ、 マルチスレッド マルチスレッド デバッグ マルチスレッド DLL マルチスレッド デバッグ DLL の4つ選択肢があって、デフォルトではマルチスレッドデバッグDLL(Debugモードです。リリースだとマルチスレッドDLLになります)に なっていましたので、スタティックリンクライブラリの意味が正直よく分かっていないのですが、 『マルチスレッドデバッグ』にしてみました。 やはりリンカエラーでます。 「LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。」 これだけ、新しい(?)エラーが出た……のかな??? 他はLNK2019,LNK2001,LNK1120(fatal)です。 ざーーーーーっとMSDNやぐぐってヒットした質問掲示板を片っ端から見て行ってるのですが、自分と該当するものは 今のところ見付かっていません。 #include "vector" vector<int> i; の二行だけでエラー出るってやっぱおかしいですよね?
- 672 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 16:11:49 ]
- ライブラリ見てる先が違うのでは?
- 673 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 16:23:59 ]
- ライブラリの設定をマルチスレッドデバッグDLLに戻して
#include <vector> でも駄目かね?
- 674 名前:デフォルトの名無しさん [2007/08/01(水) 16:26:36 ]
- いやまずは、
char str[100][300]; string str [100]; で読む込むかやって見ろよ
- 675 名前:デフォルトの名無しさん [2007/08/01(水) 16:28:33 ]
- char* ScenarioFile = "Log.txt";
char buf[500][256]; int FileHandle = FileRead_open( ScenarioFile ); int i=0; while(FileRead_eof(FileHandle) == 0){ FileRead_gets(Buf[i], 256, FileHandle); i++; } FileRead_close(FileHandle);
- 676 名前:650/668 [2007/08/01(水) 16:30:57 ]
- >>672
それだと、stringもダメになりませんかね? stringは普通に使えてます。 >>673 戻してみて、#include <vector>にしましたがダメでした。 時間掛かるけど、再インストールしてみたほうがいいっすかね?
- 677 名前:デフォルトの名無しさん [2007/08/01(水) 16:32:07 ]
- つか、なぜC/C++ライブラリや、windowsAPIを使わないのか教えろ
- 678 名前:デフォルトの名無しさん [2007/08/01(水) 16:37:36 ]
- 普通のやり方だと動くのか???
#include <fstream> using namespace std; fstream fp; string str; fp.open("Log.txt", ios::in ); do{ getline(fp, str); cout<< str<<endl; }while(!fp.eof());
- 679 名前:650/668 [2007/08/01(水) 16:38:12 ]
- >>674さん
>>675さん ありがとうございます。 vectorを使わないで何とかする方法は皆さんのおかげで無事なんとかなりましたm(_ _)m 今は、VC++2005でvectorそのものが使えないという状態で困っております…… >>677 すいません。WinAPIはまだ学習していませんので、使い方が分かりません。 やっとポインターと参照送りを覚えて、STLの存在を知って2週間ばかりのど素人です…… C/C++ライブラリとは、STLのことですよね? 今はSTLのstringを覚えて、vectorに差し掛かったばかりです。
- 680 名前:650/668 [2007/08/01(水) 16:41:14 ]
- すいません、先ほど>>677にさん付けるの忘れてました。他意はありませんm(_ _)m
>>678 普通のやり方でももちろん動きます。特にDXライブラリが悪さしているとは思えません。 ぜんぜん関係ない、ごく普通のC++の部分でエラー吐いてますので…… vectorさえ使わなければ、エラーも出ず普通に動きます。 さし当たって今やろうとしていることには必要のないものですが、C++の学習が主な目的でもありますので、 使ったらエラーという状態だけは何とかしておきたいなと思っています……
- 681 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 16:43:02 ]
- 2003もアンインスコして再インスコだな
標準でさえこのざまなんだからこの先どんな不具合が起こるかわからないって状況は普通に怖いぞ
- 682 名前:デフォルトの名無しさん [2007/08/01(水) 16:46:06 ]
- ↓のプログラムをDOSで実行すると、何故か画面がフリーズして
「問題が発生したため、終了します」という画面が出て実行できないのですが 何故なんでしょうか?文法上の誤りも自分で見る限りは特に無いと思うのですが・・・ 混じれ酢お願いします。 改行が多すぎて一度に書き込めない様なので分割して書き込ませて頂きます #include<stdio.h> #include<string.h>
- 683 名前:デフォルトの名無しさん [2007/08/01(水) 16:47:05 ]
- main(int argc, char* argv[])
{ char filename[256]; char key[128]; if(argc>2){strcpy(filename,argv[1]); strcpy(key,argv[2]);} else if(argc){ strcpy(filename,argv[1]); printf("暗号キーを入力してください>"); scanf("%s",key); } else { printf("ファイル名を入力してください>"); scanf("%s",filename); printf("暗号キーを入力してください>"); scanf("%s",key); } printf("ファイル名:%s\n",filename); printf("暗号キー:%s\n",key); return 0;}
- 684 名前:デフォルトの名無しさん [2007/08/01(水) 16:47:23 ]
- vectorは殆ど使い道ないよ
初めから必要な領域を動的確保すればよい
- 685 名前:デフォルトの名無しさん [2007/08/01(水) 16:49:38 ]
- >>682
実行するときに引数入れろよ
- 686 名前:デフォルトの名無しさん [2007/08/01(水) 16:52:43 ]
- >>683
コマンドライン引数ないとargv[1]参照してエラー起きる argcは少なくとも1だよ argv[0]にはプログラム名が入ってるから
- 687 名前:デフォルトの名無しさん [2007/08/01(水) 16:52:45 ]
- else if(argc>=2){ にしとけ
- 688 名前:デフォルトの名無しさん [2007/08/01(水) 16:53:07 ]
- >>685
実行するときに引数を入れても同じ画面が出てエラーになります・・・
- 689 名前:デフォルトの名無しさん [2007/08/01(水) 16:53:43 ]
- 途中だったw
if文書きかえて if(argc > 2) うんたら else if(argc == 2)うんたら else うんたら にしる
- 690 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 16:54:24 ]
- >>684
それだと解放する手間がかかるでしょ。 例外に強くするためにもvectorに解放を任せるのは有用。 もしかして釣られた?
- 691 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 16:59:46 ]
- >>689
ありがとうございます!!やってみたらできました こんなくだらないミスで質問をしてすみません・・・ 皆さんありがとうございました
- 692 名前:デフォルトの名無しさん [2007/08/01(水) 17:00:47 ]
- 一つ一つ内容を増やしていって確保する領域が不明であるケースなんて
ほとんどないよ それに、個数が多ければ一度に確保しておいた方が速いし、 個数が少なければ多めに確保しておけばエラーは出ない 多くても少なくてもvectorは使えない
- 693 名前:650/668 [2007/08/01(水) 17:01:09 ]
- >>684さん
なんとなく『最初から上手く設計すればいらないような……?』とは思っていたのですが……_| ̄|○ はっきり言って下さってありがとうございます。 踏ん切りが付きましたので、ひとまずvectorの学習は中断することにします。 あ、でもVC2005の再インストールだけは念のためしておこうと思います(^^; 皆さん、本当にありがとうございました!
- 694 名前:デフォルトの名無しさん [2007/08/01(水) 17:02:41 ]
- 例えば、100万個データ追加するのに
毎回vectorのメンバ関数で追加するより a[i]=5とやった方が速いし見やすい
- 695 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 17:06:06 ]
- .| | | | | | | | | | || | |
.| | | レ | | | | | J || | | ∩___∩ | | | J | | | し || | | | ノ\ ,_ ヽ .| レ | | レ| || J | / ●゛ ● | .J し | | || J | ∪ ( _●_) ミ .| し J| 彡、 |∪| | .J レ / ∩ノ ⊃ ヽ ( \ / _ノ | | \ " / | | \ / ̄ ̄ ̄ /  ̄ ̄ ̄ ̄
- 696 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 17:08:56 ]
- >>692
reserve >>694 resize
- 697 名前:デフォルトの名無しさん [2007/08/01(水) 17:10:55 ]
- vectorの方が楽
それだけで使用価値があるとは思わないか
- 698 名前:デフォルトの名無しさん [2007/08/01(水) 17:13:17 ]
- vectorの方が不便
だって[]での代入が装備されていない
- 699 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 17:13:43 ]
- >>698
はい?kwsk
- 700 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 17:16:27 ]
- template <typename T>とtempalte <class T>ってどう使い分けすれば良いんでしょうか?
- 701 名前:>>699 [2007/08/01(水) 17:18:39 ]
- #include <vector>
#include <iostream> using namespace std; main(){ vector<int> v; v.push_back(1); cout << v[0]<<endl; v[0]=2; cout << v[0]<<endl; /* 逆にしたこっちはエラーになる v[0]=2; cout << v[0]<<endl; v.push_back(1); cout << v[0]<<endl; */ }
- 702 名前:デフォルトの名無しさん [2007/08/01(水) 17:20:46 ]
- reserve();で確保すればエラー出ないんだな
しらんかった すまん
- 703 名前:デフォルトの名無しさん [2007/08/01(水) 17:21:27 ]
- >>701
そんな使い方ありえないから実装されてない 使いたければオーバライドすればいいじゃん
- 704 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 17:26:07 ]
- >>700
好みの問題。 ただし、下みたいなテンプレートテンプレートではclassしか使えなかったはず。 template<template<typename T> class T> こんな機能使わないけど。
- 705 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 17:28:39 ]
- >>702
reserveで押さえただけ領域は使ってはいけないところ。 vectorで使える要素は0番目からsize()の1つ手前の要素まで。 size()の値を変えるにはresize()。 特に要素がクラスオブジェクトだとコンストラクタが呼ばれていなかったり、 デストラクタが呼ばれた後だったりするのでわかりやすいけど、 組込型でも駄目なことに変わりはない。
- 706 名前:デフォルトの名無しさん [2007/08/01(水) 17:29:21 ]
- vectorかnewかどっちがいいかは、巨大配列を確保したときに問われるだろう
何となくvectorは100M超の領域確保に向いていない気がするが・・・ 速度、安定性において同程度ならvectorに統一した方がいい
- 707 名前:デフォルトの名無しさん [2007/08/01(水) 17:30:12 ]
- >>701
それを不便というなら、比較対照にしてる組み込み型では int *v = new int[0] と宣言してるも同然じゃね?
- 708 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 17:31:28 ]
- >>706
それは仰るとおり ほとんどの場合はvectorでも問題ないから おれはvector使う
- 709 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 17:31:46 ]
- >>704
なるほど 複雑な特殊化をする時に必要となりそうな気がするのでメモっておきます
- 710 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 17:37:55 ]
- >>706
new[]はoperator new[]関数、newはoperator new関数、 vectorは、operator new関数で確保される。 共に<new>に存在し、operator newとoperator new[]で 異なる実装になっていることは考えづらい。殆どの処理系で、同一の実装だと見なして問題ないはず。 そして、operator newやoperator new[]を自分で定義すれば、メモリ確保ルーチンを差し替えられる。 またvector(やその他全てのコンテナ)はアロケータをテンプレート引数に取り、 それを差し替えることでもメモリ確保ルーチンを変更可能。 不用意にinsertやpush_backしなければ、巨大な配列もvectorにして問題ないと思う。 それでも不安ならshared_array/scoped_arrayなんて選択肢もあるけどね。
- 711 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 18:01:21 ]
- >>710
>不用意にinsertやpush_backしなければ、巨大な配列もvectorにして問題ないと思う。 是。reserve しとけば push_back も怖くない。
- 712 名前:デフォルトの名無しさん [2007/08/01(水) 18:11:39 ]
- >>710
オーバーヘッドが掛かったり無駄に確保したりしていないかvector new単体で使えば2倍の領域確保とかないだろうし
- 713 名前:デフォルトの名無しさん [2007/08/01(水) 18:33:08 ]
-
| | | | /  ̄  ̄ \ (=) /、 ヽ J >vector厨 |・ |―-、 | q -´ 二 ヽ | ノ_ ー | | \. ̄` | / O===== | / | / / |
- 714 名前:650/668 [2007/08/01(水) 18:35:00 ]
- 戻りました。
VC++2005を修復インストールした結果、vector使ってもwarning LNK4217だけで済みました。 fatalなエラーでビルド失敗と言うことはないです。 やっぱ、何かが潰れていたっぽいっすね〜。 これでダメなら再インストールしようと思っていましたが、無事に済んだようです。 LNK4217エラーは4つ出て、どれも内容は似ています。 warning LNK4217: ローカルで定義されたシンボル ??1exception@std@@UAE@XZ (public: virtual __thiscall std::exception::~exception(void)) が フィクション __unwindfunclet$??0logic_error@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@@Z$0 にインポートされました。 僕の今の知識レベルでは、なんのことやら意味不明です。 実用上問題ないなら、#pragma warningで切っておきます。 ありがとうございました。 あれからのログを見ていると、vectorもやっぱり押さえておきたい基本技術みたいですね。 折を見て勉強再開します。
- 715 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 18:51:31 ]
- 念の為OSの再インストールからやり直したほうがいいよ
- 716 名前:デフォルトの名無しさん [2007/08/02(木) 21:26:13 ]
- typedef std::vector<Hoge> VEC_HOGE;
を定義したいときにHoge は前方宣言で対応可能でしょうか? それとも#include しなければいけませんか? 前方宣言の可付加の決まり方がいまいちわかりません。 よろしくお願い致します。
- 717 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 23:49:38 ]
- typedef std::vector<ちぺなめ Hoge> VEC_HOGE;
- 718 名前:デフォルトの名無しさん [2007/08/03(金) 00:11:16 ]
- すみません、質問させてください。
Cのプログラムで、popenを使ってpingを打ちたいと思っています。 その時に、p=popen("ping www.google.co.jp", "w")のように 直接相手先を書くのではなく、文字配列に相手先を格納し、 それを用いてpingを打つ方法がわかりません・・。 一応ぐーぐる先生にお尋ねはしたのですが、わかりませんでしたorz (聞き方がまずかったのかも知れませんが・・) どうぞよろしくお願い致します。
- 719 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 00:31:34 ]
- sprintf使えばいいんじゃないの?
- 720 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 00:39:38 ]
- 入門書読んだ方がいいんじゃないの。
ping先壊したって知らないよ?
- 721 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 00:54:31 ]
- system()じゃいかんのかね。
- 722 名前:デフォルトの名無しさん mailto:sage [2007/08/03(金) 01:02:11 ]
- >>716 って何か意味あんの?
- 723 名前:718 [2007/08/03(金) 21:14:19 ]
- 遅くなってしまいましたが、アドバイスありがとうございました。
正直自分でも、入門書レベルからやり直した方がいいなぁと 自覚はしているのですが、今回は時間に余裕がなかったもので、 ここでお尋ねした次第です・・すみません。ご忠告ありがとうございます。 system()ではどうかとのことですが、プログラムの中でpingの結果を 受け取って処理をしたかったので、今回はsystem()ではなくpopen()を使いました。 記載し忘れてしましたね。ごめんなさい。 sprintfですか。ちょっと試してみたいと思います。 皆様どうもありがとうございましたm(_ _)m
- 724 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:36:45 ]
- 行列で
-1 0 1 -1 0 1 -1 0 1 は以下のプログラムでできるんですけど(wはdouble、l,kはint) for(k=0;k<3;k++) { for(l=0;l<3;l++) { w[k][l] = -1 + k; } } -1 1 -1 -1 1 -1 -1 1 -1 はどんな感じでつくればいいですかね?増分2してみたいな・・・ 上のプログラムを極力いじらない感じでお願いします
- 725 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:40:50 ]
- 行列で
-1 0 1 -1 0 1 -1 0 1 は以下のプログラムでできるんですけど(wはdouble、l,kはint) for(k=0;k<3;k++) { for(l=0;l<3;l++) { w[k][l] = -1 + k; } } -1 1 -1 -1 1 -1 -1 1 -1 はどんな感じでつくればいいですかね?増分2してみたいな・・・ 上のプログラムを極力いじらない感じでお願いします
- 726 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 20:43:15 ]
- すいません 2回も書いてしまいましたorz
- 727 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 21:12:58 ]
- -1×-1=1
これ算数。
- 728 名前:デフォルトの名無しさん mailto:sage [2007/08/04(土) 21:16:16 ]
- -1 + k
↓ (k % 2) * 2 - 1
- 729 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 05:27:34 ]
- int v;
for(k=0;k<3;k++) { v=-1; for(l=0;l<3;l++) { w[k][l] = v; v*=-1; } } でいいじゃん
- 730 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 06:31:29 ]
- >>727>>729
本気でそんなプログラミングしているのか? 桑原桑原。
- 731 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 06:39:44 ]
- >>730
桑原桑原。
- 732 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 07:07:12 ]
- w[k][i] = i&1 ? -1 : 1;
を提案します(ぉ
- 733 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 07:07:59 ]
- lだった…orz
- 734 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 10:40:58 ]
- >>729
int v = 1; for(k=0;k<3;k++) { for(l=0;l<3;l++) { w[k][l] = v * -1; } } のほうがすっきり。
- 735 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 10:55:06 ]
- >>734
9つ全部-1にならない?
- 736 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 11:18:23 ]
- ここのつ、とう!
はい、よくできました♪
- 737 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 11:20:12 ]
- ??
- 738 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 11:49:07 ]
- !!
- 739 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 11:50:44 ]
- 3×3の行列の初期化くらいなら、
いちいちfor文で回したりせず、 double w[3][3] = { {-1.0, 0.0, 1.0}, {-1.0, 0.0, 1.0}, {-1.0, 0.0, 1.0} } これでいいじゃないか。
- 740 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 11:58:06 ]
- 例として3×3にしてるだけで、
実際はもっと大きいんじゃないのかな?
- 741 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 12:26:55 ]
- えー
for(k=0;k<3;k++) のように、ハードコーディングしてるじゃん。 もし巨大だったり、任意のサイズだったら、そういうコードになるべ?
- 742 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 12:33:55 ]
- ていうかさ、
行列の問題なのか、 数列の生成の問題なのか、 切り分けてから質問してほしい。
- 743 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 12:57:18 ]
- 全角数字使うなカス
- 744 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 18:49:04 ]
- 揚げ足取り乙
- 745 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 18:52:32 ]
- 揚げ足ってレベルじゃねぇぞカス
- 746 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 19:38:47 ]
- カスは自分のことを棚に上げる傾向にあります。
- 747 名前:デフォルトの名無しさん [2007/08/06(月) 21:24:19 ]
-
スレ違いだったらすいません。 アプリ開発の依頼スレが見つからなかったのでこちらに書かせて頂きました。 当方所有のウェブアプリケーションソフト (以前プログラマに依頼して作ってもらったものですが今は連絡が取れません) がURL先の変更?で突然使えなくなってしまいました。 そこで、緊急で本日中に改変が出来そうな方是非お願いできないでしょうか? 当方、全くの知識不足で言語が C++ということ以外分かりません。 ソースファイルは持っております。料金は2万円でお願いします! seishinkeiki@hotmail.co.jp
- 748 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 21:27:03 ]
- 本日中ってあと2時間半しかないぞ
- 749 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 21:28:22 ]
- バイナリエディタで書き換えたら使える
- 750 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 21:31:03 ]
- マルチすると来る人が居なくなるかもよ
- 751 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 21:32:25 ]
- マルチすると釣られる人が居なくなるよ
- 752 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 21:46:42 ]
- >>747
2万じゃ安いな・・8万でどうだ?
- 753 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 21:47:59 ]
- ちゃんと引継ぎしとけよ・・・
- 754 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 21:48:45 ]
- >(以前プログラマに依頼して作ってもらったものですが今は連絡が取れません)
待遇悪くて逃げられたんか?
- 755 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:08:57 ]
- >>747
解析料が必要です。弊社なら50万円で納期2週間で考えてみましょう。 プログラムのソースによって見積もりのさじ加減はかなり違います。
- 756 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:13:25 ]
- 2万とか・・・どんだけ買い叩いてんだよ
- 757 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:14:45 ]
- ローカルにプロクシ立てるとかすれば何もいじらずに済むんじゃね?
- 758 名前:デフォルトの名無しさん [2007/08/07(火) 01:09:59 ]
- 多重ループを一気に抜ける方法って、いちいちbreak文つけるか、gotoしかないんですか?
例えば、swtich文の中のif文で、break文以外の処理も行いたい時、 同じif文を二回書くことになるので、なんか無駄に長くなってしまうのですがorz
- 759 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 01:11:53 ]
- gotoつかやいいじゃん。
- 760 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 02:12:19 ]
- もうひとつある
そのループを別の関数に分離してreturn
- 761 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 03:22:37 ]
- 賛否あるが、throwってのもある。
- 762 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 03:46:58 ]
- つか、何の言語?
- 763 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 07:36:16 ]
- スレを勃てるまでもないC/C++の質問はここで 2
- 764 名前:762 mailto:sage [2007/08/07(火) 09:25:29 ]
- うぁ、すれ立てるまでもない質問はここでスレだと思ってた!
- 765 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 10:06:26 ]
- (*´д`)σ))Д`)
- 766 名前:デフォルトの名無しさん [2007/08/07(火) 15:07:36 ]
- 棒倒し法で迷路を自動生成するプログラムを作ろうとしているんですが、すべての棒が同じ方向に倒れます。
下が棒を倒す部分の関数なんですが、どこが間違ってるのか教えてください。 void KnockDown(){ int i,j; for(j=2;j<19;j+=2){ for(i=2;i<19;i+=2){ srand( (unsigned int)time(NULL) ); switch (rand()%4){ case 0:// 北 if(maze[i][j-1]!=0) maze[i][j-1]=0; break; case 1:// 東 if(maze[i+1][j]!=0) maze[i+1][j]=0; break; case 2:// 南 if(maze[i][j+1]!=0) maze[i][j+1]=0; break; case 3:// 西 if(maze[i-1][j]!=0) maze[i-1][j]=0; break; } }} }
- 767 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 15:11:43 ]
- >>766
srand()は最初に呼ぶだけにしよう。
- 768 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 15:11:45 ]
- 質問なのですが
動画にマイクで声をつけるのはどうやってやるんですか? 後、動画の編集の仕方も教えてください よろしくおねがいします
- 769 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 15:14:09 ]
- 板 違 い
- 770 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 15:21:32 ]
- >>766
0が壁で0以外が通路?何か違和感あるなw あと、ランダムで決定したところにすでに壁ができていた場合どうなると思う?
- 771 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 17:07:05 ]
- 質問です。
ウインドウズでメモリーリークを知るには_CrtDumpMemoryLeaks()を使いますが、 メモリースマッシュを知るにはどうすればいいのでしょうか? ##二重開放とかそういうことです。
- 772 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 18:54:14 ]
- >>766
一つ言わせてくれ。 質問する前に2つのことをすべし。 1. デバッガでステップ実行する。変数の値の中身も見ること。 2. 問題を切り分ける。 あなたの問題は、 すべての棒が同じ方向に倒れる のではなく、 rand()%4が同じ値になる でしょうに。
- 773 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 19:05:37 ]
- >>771
二重解放なら、 デバッグビルドをデバッガ上で走らせていれば、 デバッガのトレース出力にメッセージが出たと思う。 とりあえず、 _CrtSetDbgFlagで_CRTDBG_DELAY-_FREE_MEM_DFと_CRTDBG_CHECK-_ALWAYS_DFをオンにして、 わざと二重解放してみよう。 オーバーヘッドが多き過ぎるなら、 _CRTDBG_CHECK-_ALWAYS_DFはオフにして、 自分で_CrtCheckMemoryを呼ぶ。 _CrtSetAllocHookを使って、自分でチェックするのも手。
- 774 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 21:54:33 ]
- >>773
レスサンクス!! デバッガが警告出してくれるっぽいですねぇ。 コレで安心してメモリ確保ができるってもんです。 当方、趣味グラマの初心者なのでメモリ確保が苦手なのです。 レスほんと、サンクス! 余談ですが、こういうの作ってました。 f20.aaa.livedoor.jp/~tori/html/upboard/updir/SafeArray.lzh 内容は参照カウンタ(本命)と配列クラス(デモ)です。 デバッグは済んでいないので使用は自己責任で。 それじゃー。:D
- 775 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 22:02:39 ]
- む!直リンできないか。
f20.aaa.livedoor.jp/~tori/html/upboard/upboard.cgi または、 f20.aaa.livedoor.jp/~tori/html/upboard/updir/ から、取れるかも。
- 776 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 23:21:35 ]
- >>774
deleteした直後にNULLを代入するのは、 二重解放によるヒープの破壊を防ぐために良いことだが、 そうすると二重解放していてもチェックに引っかからないぞ! NULLを代入するのをやめるか、 NULLの代わりに-1などのアリエナイ値を代入するのがいいかと。
- 777 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 23:26:58 ]
- へー
- 778 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 01:41:57 ]
- ^←これどうやって入力するんでしょうか?いい加減コピペは卒業したい
- 779 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 01:43:44 ]
- キーボード右上「へ」のキー
ってか、ここはC/C++の質問スレなわけで・・・
- 780 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 01:46:35 ]
- >>778はポケコンの使い手
- 781 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 02:54:30 ]
- ^おぉ出た〜!!Thank you very much.
演算子で使うんです。
- 782 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 03:40:19 ]
- >>781
メモ帳とかでキーボードのキー全部押して試してみたら・・・ Shift押しながらのキーも・・・
- 783 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 07:38:34 ]
- キートップに刻印されているのだから、
キーボードをよく見ろ、でいいと思うが。
- 784 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 07:41:12 ]
- たまにいくつかの記号の類を出せないキーボードはあるよな
なに考えて作ったのかと思う
- 785 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 08:04:29 ]
- >>784
もしかして:ASCII配列のキーボードをJIS配列の設定で使用?
- 786 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 15:28:10 ]
- うちのキーボードは半角の”\”だせなんだぜ?
\になる。
- 787 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 15:43:42 ]
- 前は、チルダの位置が2つずれてなかったっけ。
今のはちゃんとしてるようだが。
- 788 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 15:43:50 ]
- 俺も俺も
- 789 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 17:11:13 ]
- だいぶ前だけど、I/Oの「今月の添付ディスク」コーナーでは
毎回必ずアンダーバーの入力の仕方が書いてあったことを思いだした
- 790 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:32:12 ]
- 変な質問かもしれませんが
OSはC言語で作られているんですよね? WindowsのアプリケーションはWinMain関数ですが、Windows自体の main関数はどのような感じに記述されてるんでしょうか? MSの人で無いと解らないんですかね?
- 791 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:38:56 ]
- >>790
・C言語で書かれた物が、全てmain()を持っているわけではありません。 ・main()はアプリケーションの入り口としての規格上の共通部であり、どう実装されるかは環境依存です。
- 792 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:39:13 ]
- >>790
WinMain や main は、それを呼び出すルーチンがあって リンク時にそれをリンクしてるだけなんだぜ。 そのルーチンがどうなってるかは気にならないのか
- 793 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:49:47 ]
- >>791
>C言語で書かれた物が、全てmain()を持っているわけではありません。 そうなんですか・・。Cの全てのソフトがmainとかWinMainで始まると思っていました。 >main()はアプリケーションの入り口としての規格上の共通部であり、どう実装されるかは環境依存です。 つまり色んなOSのアプリケーションの入り口として〜mainなのですか。 >>792 >WinMain や main は、それを呼び出すルーチンがあって >リンク時にそれをリンクしてるだけなんだぜ。 >そのルーチンがどうなってるかは気にならないのか 気になりますね。でも、そーゆーの気になりだすと 最終的には電気信号とかのレベルまで行かなくならなきゃならなそうです。。。 とりあえず今はC勉強します。お二方とも解答ありがとうございます。
- 794 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 17:56:36 ]
- アセンブラの勉強をしてみるといいかもね。
- 795 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:06:10 ]
- あ専ブラですか、分かりました。
- 796 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:12:19 ]
- 俺の発言みたいにとられるようなレスしないでください。
どうでもいいけど。
- 797 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:13:05 ]
- crt0.asm とかね
- 798 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:17:29 ]
- >>796
お前の発言みたいにとらないでください。 どうでもいいならレスするな死ね。
- 799 名前:794=791 mailto:sage [2007/08/09(木) 18:29:29 ]
- >>796
自己主張したいならコテでもつけとけ。
- 800 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:32:30 ]
- >>798
だって>>793のレスに対して>>794はレスされたのに 無関係のお前が>>795みたいなレスされたら誤解するだろ。 >>799 こんな馬鹿げた自演してどうすんだよ。しょーもない。 やっぱどの板でもID表示欲しいわ。とりあえず今日はROMる。
- 801 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:34:36 ]
- どうでもいいんだろ。
誤解されとけや
- 802 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:45:21 ]
- >>793
本題から少し脱線してしまうが・・・ Windowsのアプリケーションの入り口は、厳密には、WinMainではないよ。 Windowsがアプリの実行ファイル(EXE)をロードして実行する際の入り口は、 「エントリポイント」と呼ばれているが、それは特定の名前のC言語の関数ではない。 C言語に限定されていないし、ましてや、C言語の関数名でもない。 マイクロソフトのCコンパイラ・リンカを使っているのであれば、 リンカのマニュアルで/ENTRYオプションの説明を読むべし。
- 803 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:46:53 ]
- アセンブラの勉強しても仕方ないだろう。
マシン後とアセンブリー言語が理解できるようになってから、アセンブラを勉強したほうがイイ。
- 804 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 18:54:11 ]
- マシン「語」
アセンブリ「言語」 なんて使う必要がなければ、理解しなくていいよ。 基本的なコンピュータのアーキテクチャを知っていれば、それで十分。
- 805 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 22:58:02 ]
- いや、仕事で使うから覚えますた ってだけじゃぁなぁ
金にはならないかもしれないけどとことんやれば良いと思うよ
- 806 名前:デフォルトの名無しさん mailto:sage [2007/08/09(木) 23:11:36 ]
- そういう人好き
- 807 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 00:27:24 ]
- >>790
初期のUNIXは確かに古いC言語や一部アセンブラで書かれていた。 だが、Windowsや旧MacOSやμiTRONやVxWorksや...(略)はC言語で書かれているのだろうか?
- 808 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 00:41:43 ]
- 今でも一部アセンブラは当然として、
MacOSはObjectiveCかPascal、 他もCやC++、 字句解析などでは適宜別の言語、 などなど適材適所でしょ。
- 809 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 08:02:59 ]
- >>805
仕事かどうか、金になるかどうか以前に、 人生に許された時間は限られているんだよ。 >>807 WindowsはNT系はC言語で書かれたと聞いてる。 NT4.0の頃に聞いた話なので今は違うかもしれない。
- 810 名前:デフォルトの名無しさん [2007/08/10(金) 16:34:55 ]
- 低俗な質問でほんとすいません。
クラス型のポインタを持つ配列を作りたくて苦心していますが上手く行きません。 (global.h) extern class hoge *p[10]; (global.cpp) hoge *p[0] = new hoge; と書いていまして、.cppのほうでエラーが出ます。 文法的に間違っていると思うのですが、どこが間違っているのでしょうか? 宜しくお願いします。
- 811 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 17:19:31 ]
- いろいろ違う気がするが・・・w
エラーメッセージ出して1つずつ解決しては。 class定義は見える位置にあると仮定して、 extern hoge *p[10]; p[0] = new hoge; とやるかな。
- 812 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 18:24:56 ]
- >>810
問題の中身よく見てないけど、とりあえず上の方に出てるやつ数個でも良いからエラーの内容書け
- 813 名前:810 [2007/08/10(金) 18:43:28 ]
- >>811
ありがとうございます。 なお、クラスを定義してる"Hoge.h" もGlobal.hにてインクルードしてます。 今、エラーコード全部ぐぐって内容見てる途中です。 >>812 error C2040: 'PC' : 'int []' は 'cHoge *[4]' と間接操作のレベルが異なります。 error C2440: '初期化中' : 'cHoge *' から 'int []' に変換できません。 error C2466: サイズが 0 の配列を割当てまたは宣言しようとしました。 error C2501: 'PC' : 識別名を宣言するのに、型が指定されていません。 (※クラス名だけはcHogeに書き換えています) というエラーが出るんですが、ぐぐってみても今ひとつ要領を得ないのです。 「ああ、こういう間違った書き方してるから暗黙的にint型にされてるんだな」とは分かるんですが、では正しい書き方はどうなのかというのが分かりません。 普通にint型とかchar型のポインタ配列作る気持ちでやってたら、ちょっと勝手が違うようですね。手強いです。
- 814 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 19:03:38 ]
- >>813
>hoge *p[0] = new hoge; は hoge *p[0]; p[0] = new hoge; hoge *p[0]; だと >error C2466: サイズが 0 の配列を割当てまたは宣言しようとしました。 が出る。 だから hoge *p[10]; p[0] = new hoge; この辺はintやらcharでも変わらんと思うけど。 >>811のexternは書き間違いとちゃうかな。 勘違いだったらすんません。
- 815 名前:810 [2007/08/10(金) 19:15:13 ]
- >>814
ありがとうございます。 いままさに、同じような感じで書いていました。 結果は×でした。エラー内容全く同じ…… (Global.h) #include "HogeHoge.h"(クラス内容の書かれたヘッダ) extern class cHoge *PC[4]; (Global.cpp) cHoge *PC[4]; PC[0] = new cHoge; という状態で、全く同じエラーでます。 どうやら、PC[0]が*PC[4]の一部と見なされてない感じです。 エディタ上でPC[0]の上にマウスカーソル乗せたら、 cHoge *PC[4]ってポップアップが出てるんで、余計にわけわかんない。 なんで暗黙的int扱いされるんでしょう?
- 816 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 19:20:28 ]
- ごめん。
全然違うわ。 extern cHoge PC[4]; cHoge PC[4]; こうじゃねぇ?
- 817 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 19:23:15 ]
- なんだよ、よそで配列定義してあってのexternじゃないのかよ。
ファイル1つでうまくいった上で、分けたらおかしくなってるのか もともとやりかたがわかんないのかどっちだよ。
- 818 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 19:28:08 ]
- とりあえず、これでどうなる
(Global.h) #include "HogeHoge.h"(クラス内容の書かれたヘッダ) extern cHoge *PC[4]; (Global.cpp) cHoge *PC[4]; PC[0] = new cHoge; 念のため言っておくけど、こっちではコンパイルできてるから うまくいかないなら環境書いてね
- 819 名前:デフォルトの名無しさん mailto:sage [2007/08/10(金) 22:31:55 ]
- なんか知らんが、トップレベルに
PC[0] = new cHoge; を書いてるんじゃなかろうな。
- 820 名前:810 [2007/08/11(土) 09:46:02 ]
- おはようございます。
3時過ぎまで頑張っていました。 >>817 そうです。分けたらおかしくなりました。 >>818 Global.h に extern class cHoge *p[4]; と書き、どこでも良いので関数内で cHoge *p[4]; p[0] = new cHoge; は上手く行きました。 所で、extern class cHoge ではなく、extern cHoge なのですか? そう書くとずらずらエラーがでるのですが…… ちなみに、他にもextern class hogehoge *tmp; という書き方でグローバルな インスタンスを3つほど作っていて、そちらは問題なく動いているのですが、 これはexternに対する私の理解が根本的に間違っているのでしょうか? >>819 えっと、その通りです。global.cppは、関数を含まないソースファイルです。 Global.hでextern宣言したものに実体を与えてグローバルクラスとして使うための ものです。 上記の通り、トップから外して関数ないで宣言したら普通に使えました。 やはり、根本的に何か間違っていますか?
- 821 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 10:27:14 ]
- >>820
何というか・・・ まず1つ目 グローバルなオブジェクトには、どこかに実体が必要だが、 その実体というのは、cHoge*なのであってcHogeではない。 グローバルスコープでnewするのは行儀が悪いのでやるべきではない。 2つ目 クラスの定義が既に済んでいるのであれば、class は書く必要がない。 もしclassを書かないと具合が悪いのであれば、クラスの定義が済んでいない。 3つ目 グローバルなオブジェクトは気軽に作るべきではない。
- 822 名前:810 [2007/08/11(土) 10:53:07 ]
- >>821
実はいま、グローバルを極力廃止して書き直してます。 そちらでは問題なく動いています。 「よく使うのはもう纏めてグローバルにしたら?」って言われてやってみたのですが、 確かに初動は早いけどひとたびエラー起こったらわけ分からなくなりました。 >その実体というのは、cHoge*なのであってcHogeではない。 !!! class書かないとエラーでるので、仰るとおり、定義されてないようです。 そうか、そういうことだったのか…… グローバルスコープでのnewもやめます。 ありがとうございました。
- 823 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 22:17:31 ]
- 最近C++を始めて、静的配列のdelete[]クラッシュにはまったんですが、疑問があったので質問
以下のコードでクラッシュしないのはなぜ? #include <string> int main(){ int is=0; //これが無いとクラッシュ std::string array[2] = {"hoge", "fuga"}; delete[] array; return 0; } コンパイラはMS製です
- 824 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 22:18:44 ]
- そもそもdeleteなんているのか?newがみえないんだが・・・
- 825 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 22:26:43 ]
- new[] してないものを delete[] してはいけません。
new[] と delete[] は1対1
- 826 名前:823 mailto:sage [2007/08/11(土) 22:27:30 ]
- いらないことは分かってますけど、ただ疑問に思ったので…
上記のエラーを探ってた時に、変数の有り無しでプログラムのクラッシュするしないが変わるものかなと…
- 827 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 22:29:22 ]
- スタック破壊。
- 828 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 22:31:41 ]
- >>826
たまたま使ってるコンパイラではクラッシュしなかっただけの話だろ。 他のコンパイラだと鼻から悪魔が出てきても文句は言えない。
- 829 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 22:36:29 ]
- >>826
その手の行為で、どんなことが起きるかは、基本的に予測できない。 間違ったことをした、ずーーーーーっと後で落ちる、っていうことも多い。 知らないうちに関係ない変数が書き換わってる、とかいう現象になることもある。
- 830 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 23:38:38 ]
- サンクス、何となく理解した
- 831 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 23:40:09 ]
- >>810=>>822
1〜2KByte以下のRAMの少ないマイコンならそういうテもあるが、 そうでもなければグローバルにまとめるのはやめとけ。 PCのプログラミングならグローバル変数を使わなくてはならない状況はまず考えつかない。 仮にあったとしても、保守erが苦労するだけなので使わないようにしている。 ちなみに、 hoge_type *p[10]; みたいな用例は時折あると思うが、演算子の評価順と同じで、この p は、 hoge_type *p; が10個ある配列になる。だから、通常は ヘッダファイル extern hoge_type *p[10]; か、 extern hoge_type *p[]; になる。 時々間違えるのは、ちょっとうまい使い方を覚えたC/C++言語erが hoge_type *p[10]; という定義に対して extern hoge_type **p; または extern hoge_type p[][10]; などとしてしまうことであり、これは正常に働かない。
- 832 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 23:54:09 ]
- >>823
ちょっと論点をずらすが、 std::string array[2] = {"hoge", "fuga"}; これは、std::stringの定義を理解した上での記法であり、 std::stringは引数が空のコンストラクタを持っているので、 std::string array[2]; array[0] = "hoge"; array[1] = "fuga"; とした方が安全。
- 833 名前:デフォルトの名無しさん [2007/08/12(日) 00:14:06 ]
- VC++2005 Express Editionでは、atoi()やstrtok()といった古い関数は使えないのでしょうか?
VC6で作ったソースを読み込んでコンパイルしたら、コンパイルは通るのですがリンカエラーがでます。 必要なヘッダのincludeはしています。 ”LNK2019: 未解決の外部シンボル __imp__strtok が関数 _main で参照されました。” というリンカエラーやLNK2001がでます。 #include <stdio.h> #include <string.h> int main(void) { char str[] = "ABCD ef.1234.G"; char *tp; tp = strtok( str, " ." ); puts( tp ); while ( tp != NULL ) { tp = strtok( NULL," ." ); if ( tp != NULL ) puts( tp ); } return 0; } 例えばこれだと、putsにもstrtokにも同じ上記リンカエラーがでます。 お手上げです。よろしくおねがいします。
- 834 名前:デフォルトの名無しさん [2007/08/12(日) 00:30:30 ]
- 板違いかもしれません。ですが質問します。
同じ質問をVBスレでしたのですが、 私の聞いた事がレベルが低いのか、書き方が悪いのか、 回答が得られなかったので書きます。 C#.NETとVB.NETの違いって何ですか? 調べてみると、(触り程度) C#.NETにメモリーを切る(確保)概念が無くなったと。 だったら、方言とコンパイルの速度だけの違いになりますか?
- 835 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 00:33:36 ]
- >>834
言語が違うってだけじゃ不満?
- 836 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 00:35:57 ]
- C#.NET と VB.NET の違い・・・ 言語が違います。以上。
メモリーを切るって意味不明
- 837 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 00:38:45 ]
- ふと、疑問に思った。
.NET自体触ったことないんだけど、VB.NETってインタプリタじゃないの?
- 838 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 00:45:30 ]
- ない
JITでネイティブコードにコンパイルされる
- 839 名前:デフォルトの名無しさん [2007/08/12(日) 00:47:01 ]
- ちょっと、この話は興味ある。
言語が違うだけって、書き方が違うだけなの? C#の方が、いろいろ出来るイメージがあるけど。
- 840 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 00:47:50 ]
- やっぱそうなのか・・・
C#とVBでネイティブコードレベルで違いって大きくでたりするもの? って、違いがあったら.NETの意味がなくなるからそんなことない?
- 841 名前:デフォルトの名無しさん [2007/08/12(日) 00:53:04 ]
- 人から聞いた話。
C#の方が早いって聞いた。(アプリの動き) あと、マイクロソフトがVBよりC#に重きを置いてるとも。
- 842 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 00:53:27 ]
- >>840
ない。前にMSがC#でもVB.NETでも同じコードをコンパイルしたら、 同じIL(中間言語)になると宣伝していた覚えもある。 (ただしデフォルトではオプションが異なるので、そのままでは全く同じILにならないという註付きで) >>834 記憶域を確保するという概念がなくなったというより、 それを解放する操作を明示する必要がなくなったというのがより正確。 そして、それは.NETの特徴なので、これはC#でもVB.NETでも同じ。
- 843 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 00:54:30 ]
- つまりは慣れてる言語で書くのがいいってことでFA?
- 844 名前:デフォルトの名無しさん [2007/08/12(日) 00:56:43 ]
- >>842
ありがとうございます。 う〜ん、あまり、VBとC#の差異が見えませんね。 調べてみたら、C#の方が開発期間が長くなるとありました。
- 845 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 01:07:57 ]
- VB.NET だと unsafe コードが書けない、っていうのはある
- 846 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 01:30:13 ]
- どうでも良いが、なんでこのスレで質問したんだろう・・・。
C#もVB.NETも、C/C++とはほとんど関係ないと思うんだが。
- 847 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 03:53:27 ]
- 「スレ立てるまでもない質問はここで」と見間違えたとかかな?
- 848 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 07:14:32 ]
- >>823
「クラッシュ」と一言で片付けるあたりがダメぽ。 せっかくランタイムライブラリやOSが情報をくれているのにね。 ちなみにdelete[]の実装を見てみ。
- 849 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 07:23:19 ]
- >>833
「エラーが出ます」と言って思考停止するなよ。 エラーメッセージは読むこと。 意味がわからなければ、リンカのマニュアルのエラーの解説を読むこと。
- 850 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 07:30:35 ]
- >>844
VB.NETとC#は当初、機能に違いがなく、字面だけの違いで、機械的に相互にコンバート可能だった。 ぶっちゃけ、VB.NETにはVB風の字面という存在価値しかなかった。 ところが、VB専門の連中が、 VB.NETへの移行のために勉強すべきことが多すぎて嫌だと拒否したので、 しかたなく、VB.NETはVBに近くなるように、C#と機能に違いを持たせることになった。 そういう経緯なので、C#に何の抵抗も無い人は、C#とVB.NETで開発期間は違わない。 VB.NETを使ったほうが便利な部分があれば、そこだけピンポイントでVB.NETで書けばいい。
- 851 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 08:26:46 ]
- 鼻から悪魔なんて久しぶりに
- 852 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 08:37:28 ]
- >>844
ぶっちゃけ、セミコロンがあるかないかの違い。 VBしか書けないダメ派遣はどうやってもセミコロンが書けないらしいよ。
- 853 名前:デフォルトの名無しさん [2007/08/12(日) 10:19:37 ]
- 自前の構造体で、
その構造体の中で入力の>>演算子をオーバライドしようとしても上手くいきません。。。 struct { int x; istream& operator>>(istream& s) { s >> x; } } こうじゃないんですか?
- 854 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 10:39:05 ]
- >>853
それは演算子の左辺が構造体で右辺が istream の >> を定義していることになる
- 855 名前:デフォルトの名無しさん [2007/08/12(日) 11:01:31 ]
- >>854
左辺はistreamじゃないんですかね。。。 勉強不足みたいなんで出なおしてきます。 ありがとうございました。
- 856 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 11:18:12 ]
- int main(void)
{ String s1; String s2; String s3("CCC"); String s4("DDD"); s1.set("AAA"); s2.set("BBB"); s2.add(s3); s4.add("EEE"); printf("s1:[%s](%d)\n", s1.get(), s1.getLength()); printf("s2:[%s](%d)\n", s2.get(), s2.getLength()); printf("s3:[%s](%d)\n", s3.get(), s3.getLength()); printf("s4:[%s](%d)\n", s4.get(), s4.getLength()); cout << "s1:[" << s1.get() << "](" << s1.getLength() << ")" << endl; cout << "s2:[" << s2.get() << "](" << s2.getLength() << ")" << endl; cout << "s3:[" << s3.get() << "](" << s3.getLength() << ")" << endl; cout << "s4:[" << s4.get() << "](" << s4.getLength() << ")" << endl; return 0; } 結果: s1:[AAA](3) s2:[BBBCCC](6) s3:[CCC](3) s4:[DDDEEE](6) s1:[AAA](3) s2:[BBBCCC](6) s3:[](3) s4:[DDDEEE](6) s3の値がcoutで出したときおかしいのだが、bcc55ってこんなに馬鹿なのか? それともおれが馬鹿?
- 857 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 11:26:57 ]
- >>851
鼻から悪魔が出るは、何の例えになるのでしょうか?
- 858 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 11:37:57 ]
- i = i++; のような未定義のコードは何が起きるか分からないという話
未定義のコードを実行をした結果、たとえ鼻から悪魔が出てきたとしても、その処理系は規格に反してはいない まぁ現実問題、そんなことで悪魔を呼び出せるんならすでに世の中は悪魔だらけだ
- 859 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 11:47:24 ]
- >>856
bccのStringクラスの仕様が判らんからなんとも言えんが、どうも挙動が不自然だね。
- 860 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 11:52:56 ]
- >>858
ワクワクしますね、何処かに冒険家いませんかね? ありがとうございました
- 861 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 11:55:03 ]
- >>859
Stringクラスは自前なんですが。。 どうやら、cout時点でs3の中のchar*pが""になってるみたいです。 coutの後でprintfしても出ませんでした。 C++初心者状態なのでclassの作り方に失敗してるのかもしれませんね。 coutにバグがあるとも考えにくいですから。。。
- 862 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 12:44:25 ]
- >>861
んじゃ、領域破壊をしているに一票。 add()の辺りが怪しいと見た。
- 863 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 14:09:48 ]
- バイナリハックに一票です
- 864 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 14:30:42 ]
- BCCは3.0から4.5まで愛用したクチだが、いまどきBCCはないだろう。
マイクロソフトのVC++なら、メモリ破壊を(ある程度)検出する機能が付いているよ。
- 865 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 14:33:38 ]
- 自分も昔はBCC愛用してましたが、VC++Expressが出たからもう使ってない
- 866 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 03:14:05 ]
- 僕は自分でC++コンパイラ作って使ってますけど
- 867 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 03:18:34 ]
- iccやmsvc、gccには一生かかっても勝てません
- 868 名前:デフォルトの名無しさん [2007/08/13(月) 03:19:19 ]
- これからC++を勉強しようとしている者ですが
なにか良い勉強ツールはないでしょうか? できれば「Study C」のようなプログラムをコンパイルせずに実行できるようなものがいいんですが...
- 869 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 03:22:32 ]
- 開発環境ってこと?
- 870 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 03:23:51 ]
- VC++でも使ってろ
- 871 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 03:25:15 ]
- VC++Expressがいいんじゃないの?無料だし
- 872 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 03:25:45 ]
- 昔Macintosh使って悪魔を呼び出すって映画があったよな。
>>868 コンパイルをせずにというのが何を意味しているのかよく分からないんだけど、 正直、自分でコードを書かずに言語が身につくとはとても思えない。 コマンドラインからのコンパイルが面倒だというなら Visual C++ 2005 Express Edition を落として使えばいいんじゃないかと。
- 873 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 03:26:42 ]
- インタプリタってことだろ
- 874 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 03:27:33 ]
- あるいはアセンブリャか
- 875 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 03:30:43 ]
- あのう
PIC使って自動あえぎ声再生機能付きダッチワイフを作りたいんですけど 何から始めたらよかですか?
- 876 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 03:32:40 ]
- この人何いうとっと?
- 877 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 03:33:02 ]
- 完全防水型圧力センサー
- 878 名前:868 [2007/08/13(月) 03:36:43 ]
- 的確な言葉がいえずすいません
プログラム文を書いてワンボタンでそのプログラムの実行結果が確認できるようなツールがほしいのです. 以前C言語の勉強をしていたときに使っていた「Study C」がそういうものだったんでC++でも似たものがないかと思い質問してみました.
- 879 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 03:36:46 ]
- せがらしか
- 880 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 03:39:53 ]
- CINT
- 881 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 03:57:32 ]
- >>876>>879
九州人じゃなかごたんね 無理して九州弁ばしゃべらんでよかよ
- 882 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 04:02:09 ]
- ばってん
- 883 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 04:10:27 ]
- ばってん何ね?
- 884 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 04:12:11 ]
- 九州男児を舐めん方がよかね
- 885 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 04:14:04 ]
- 残念
格助詞の「を」は「ば」になるんだ
- 886 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 04:15:38 ]
- ばりちろ
- 887 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 04:16:37 ]
- そがどないしたと
- 888 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 04:18:34 ]
- 創作方言やろうぜ
- 889 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 04:18:51 ]
- どない→どげん/どがん
- 890 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 04:20:33 ]
- 「どぎゃん」とは言わんと?
- 891 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 04:20:41 ]
- (#^ω^)ピキピキ
- 892 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 04:24:02 ]
- >>890
言う
- 893 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 05:01:36 ]
- せからしか!
- 894 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 05:26:22 ]
- そうかしら!
- 895 名前:デフォルトの名無しさん [2007/08/13(月) 05:40:05 ]
- なんでこんな流れに?
- 896 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 05:41:10 ]
- 暇な学生が多い
暇な社会人も(もしかしたら普段より)多い(かもしれない)
- 897 名前:デフォルトの名無しさん [2007/08/13(月) 05:48:12 ]
- 夏ですな蝉も鳴き始めた時間です
- 898 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 05:48:39 ]
- お前が上げるからじゃ!
- 899 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 05:51:36 ]
- さいでした
- 900 名前:デフォルトの名無しさん [2007/08/13(月) 06:17:36 ]
- 自演厨通報しますた
- 901 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 06:28:31 ]
- 通報しないで|(●)ム(●)|
- 902 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 06:29:08 ]
- いやんばか
- 903 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 08:52:03 ]
- >>878
> プログラム文を書いてワンボタンでそのプログラムの実行結果が確認できるようなツールがほしいのです. それは目的ではなく手段だよね。 まず、 試行錯誤的にプログラムを書き換えて、「たまたま」目的の動作をするのを見つけ出す というのは、やめたほうがいい。かえって遠まわりになる。 次に、 勉強段階の人ほど優秀なコンパイラ&デバッガを使ったほうがいい。 とくにデバッガの優劣は、勉強の効率に非常に大きく効いてくる。 というわけで、VC++を勧める。Express Editionで事足りるかはわからないが。
- 904 名前:903 mailto:sage [2007/08/13(月) 08:57:55 ]
- それからもう一つ。
Webで無料で見られるサイト「だけ」で勉強しようとしているのなら、それは良くない。 良質なサイトはたくさんあるが、それでも、良質な本のほうがずっと優れている。 つまらないところで躓くのは、 ・それに必要な知識が抜け落ちている ・間違った知識を取り込んでしまっている ・下手な解説に惑わされている といったことが原因になりやすい。 本を買うのにはお金がかかるが、 人生の限られた時間を浪費するのに比べたら、 本を買うお金なんて安いものです。
- 905 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 09:02:30 ]
- ちゃんと勉強できる人にはデバッガは強力なツールになるが、
そういう人はデバッガがなくても自分で工夫して何とかできる。 また、デバッガに頼って結果第一主義になると規格に則った知識が身につかない。 従って、余り勧めない方がいいと私は思う。
- 906 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 09:28:13 ]
- できる・できない、ではなくて、効率の話なんだけどなぁ。
そりゃぁデバッガなくたってデバッグは可能さ。 でも無駄に労力使うでしょう?
- 907 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 09:30:22 ]
- 少なくとも、この手のスレで、
自分が書いたプログラムがうまく動きません、何が悪いのかサッパリわかりません。教えてください。 なんていうような質問する人は、デバッガでステップ実行すらしてないのよ。
- 908 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 09:53:08 ]
- STL等のテンプレートを使うと、ステップ実行は非常に効率が下がるのだが。
- 909 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 12:12:15 ]
- だから、デバッガをきちんと役立てることができる人には、わざわざ勧める必要がないんだけどな。
勧められないと使えない人は、きちんと役立てることができないだろうからやはり、勧める必要がないんだ。
- 910 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 12:14:06 ]
- デバッガがなくても自分で工夫して何とかできる人ほど、デバッガを使うんだなこれが。
- 911 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 12:27:42 ]
- >>909
そんなことを言っていたら、 自力で習得できない人はプログラミングに向いてないから辞めたほうがいい ということになってしまうぞ。 スレを見ていると、 デバッガでステップ実行しろ! と言われて、素直にステップ実行して問題解決している人も、少しはいる。 どんなに能力や素質、やる気があっても、知るチャンスがなければどうにもならない。 残念ながらステップ実行しろと言われても無視しているような馬鹿のほうが多いけどな。
- 912 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 12:30:03 ]
- >>911
>自力で習得できない人はプログラミングに向いてないから辞めたほうがいい 私の主張したいところはまさしくそこです。
- 913 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 12:36:56 ]
- >>912
向いてる向いてないに関わらずやらにゃならん状況はあるわけで。
- 914 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 12:41:05 ]
- そんな香具師にデバッガ渡したら、「偶偶動いたからOK」的なプログラムを量産される羽目になりかねんが。
- 915 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 14:11:38 ]
- それはデバッガ使わないやつこそそうなるだろう。
デバッガに消極的な人は、便利なツールの無い環境でやってんの?
- 916 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 15:15:39 ]
- ステップ実行しない = 意図したとおりのパスを通っているか確認しない
ということなわけで、偶然動いているだけなのを見過ごしてしまいやすい。
- 917 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 15:18:17 ]
- うわぁ、イコールで結んじゃったよ。
- 918 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 19:42:47 ]
- >>916
趣味でのプログラムの話?仕事でのプログラムの話? 趣味のプログラムならPTなんかしないし(ていうかテスト自体しないけど) 仕事のPTでデバッガ使ってやるような個人に頼ったテストはほとんどしない。 まぁPTで通しにくいパスも確かにあるんで、 デバッガ使ってパス確認を全否定するつもりはないけども、 常にソレに頼るようなのはアホだと思うけどね。
- 919 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 20:14:39 ]
- >>918
自分は仕事でも趣味でも、程度の差はあるけれども、書いたコードは1度はステップ実行するよ。 PTではなくCDで。会社によってはCDとPTを一緒にしてCPTと呼んでいるかもしれないが。 趣味だとテストなんてしないに等しいから、なおさら、ステップ実行は大切だよ。
- 920 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 20:18:41 ]
- はいはい
- 921 名前:878 mailto:sage [2007/08/13(月) 21:12:44 ]
- >>903
C++に関してはド素人なんで「初めてのC++」を買って勉強しているんですが,一々100行にも満たないプログラムをコンパイルしてEXEを作って実行とかは煩雑でして... ちなみにいま使っている開発環境はVC++です。なかなかなれないんで別に使いやすそうなのがあればいいなと思い質問しました。設定次第でステップ実行やワンボタンで実行結果の確認ができるのであれば、このままこれでいこうかとも思ってます。
- 922 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 21:28:48 ]
- CTRL+F5で実行、質問にyes
でビルド後即実行 これでも面倒ですか?
- 923 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 21:32:53 ]
- >>921
お前には向いてない あきらめた方がいい
- 924 名前:878 mailto:sage [2007/08/13(月) 21:35:30 ]
- >>922
そんなんあったんやそれならいけそうです >>923 うるさい頑張るわ!
- 925 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 21:41:04 ]
- あほすぎうざい
- 926 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 21:49:45 ]
- >>924
ちなみにVC++ expressね 起動してからショートカットキーの入力と文字の入力でプログラムプロジェクト作成して コード入力→ctrl + F5で実行、動作がおかしければF9でブレークポイント設定して F5でデバッグ実行 と適当にショートカットキー入力してるだけでどんどん作業がすすむ これで面倒とか言ってたら他のはとてもじゃないけど使いこなせないよ
- 927 名前:878 mailto:sage [2007/08/13(月) 21:59:37 ]
- >>926
うるさいカスタマイズして使うわ!
- 928 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 22:08:19 ]
- >>926
VC++っていろいろ設定いじれるんですね。C++の勉強するまえにそっちの勉強したほうがよさそうです。 今度マニュアル本でも買っていろいろためしてみようと思います。 あと927は私じゃないんで放置しといてください。助言ありがとうございました。
- 929 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 22:10:45 ]
- あほすぎ
VC++先に勉強してあほのお前に分かるわけないやろw
- 930 名前:デフォルトの名無しさん [2007/08/13(月) 22:20:48 ]
- 韓国が8/15終戦記念日に2chを潰そうとしています
ソース cafe.naver.com/makjang212.cafe 日本語訳 vista.jeez.jp/img/vi8700172598.jpg
- 931 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 06:10:05 ]
- で、どうしろと?
- 932 名前:デフォルトの名無しさん [2007/08/14(火) 21:06:30 ]
- 質問です。
ソースファイルをまたいでCArrayを使用したいのですが、 どのようにやればいいのかわかりません。 具体的には、片方のソース内でAddして、もう片方のソース内で 使いたいです。
- 933 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 21:08:38 ]
- 説明が面倒なので
extern CArray hoge;
- 934 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 21:26:36 ]
- >>932
自分がやりたいことくらい、相手にわかるように説明しような。
- 935 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 21:32:42 ]
- >>932
お前にはムリだ。あきらめろ。
- 936 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 21:45:30 ]
- >>856
だけど、みなさんのアドバイスにしたがってただ今VC++Exなんたらをインストール中 にしても時間がかかるね。。。
- 937 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 21:59:54 ]
- いちいちそんなこと書くなアホすぎでわろた
- 938 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 22:05:20 ]
- うるせーばーか
- 939 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 22:18:58 ]
- 殺すぞてめー
- 940 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 22:22:15 ]
- VC++は初心者にはお勧めできないシロモノですよ。
言語のイロハを学習する前に、ツールの使い方や設定などの前段階で ワケワカメとなる可能性が非常に高いです。 特に2005のExpressだと、デフォルトではWin32の選択肢が出て来ないという 極悪ぶりですし(すなわち自動的にC/C++ではなく .NET方面へ誘導される) 仮にそこの設定をクリアしたとしても、テンプレートの中身を見てまたまた 目を回す事態にもなるでしょう。 デフォルトでUNICODEの設定フラグが立ってるのも鬼門ですね。 一般的なC/C++の参考書の書式が通用せずに警告が出まくって、これまた 混乱の極み間違いなしです。 sprintf、_sprintf_l、swprintf、_swprintf_l、__swprintf_l sprintf_s、_sprintf_s_l、swprintf_s、_swprintf_s_l また、この辺の初歩的な関数の取り扱いは、もはやギャグの領域とも思えます。
- 941 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 22:23:41 ]
- まっアホには使えないってこったな
- 942 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 22:28:08 ]
- emacsとか使ってmakefileとかjamfile書く方が楽なのか?
俺はそうは思わないけど
- 943 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 22:41:28 ]
- 怖いなぁ
- 944 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 23:20:03 ]
- なにこれVC++って新しいんだな
warning C4996: 'strcpy' が古い形式として宣言されました。
- 945 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 23:29:47 ]
- 944古すぎ
- 946 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 23:36:14 ]
- >>940
その「一般的な」参考書というのは、「レガシーな」参考書の間違いだろう。 入門者に時代遅れのC標準ライブラリを使わせること自体が間違いだよ。
- 947 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 23:46:31 ]
- そしてM$と心中するわけですね。
- 948 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 00:05:45 ]
- ちげーよ。
C++のためのステップとしてのCなんて必要ない ってことさ。 C++ならstrcpyもsprintfも必要ない。
- 949 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 00:46:56 ]
- >>610
遅レスだが template<typename U> friend class foo<U>; ではなく、 friend foo ; これで、同じテンプレートから作られたものはfriendになる。
- 950 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 01:50:10 ]
- >>940
まずはWindows上でC/C++を勉強するのに薦めたい環境を出せ。 インストーラがパスとかも通してくれるし、 勉強程度ならほとんどの場合、F7押すだけでビルド、 F5押すだけでビルドから実行までしてくれる何が難しいのか。 (2005 EEのビルドはF6だっけ?うちはVS2005SEなんで違った気もする) C/C++の勉強するのになんでWin32APIが出てくるのかも非常に謎。 Cの標準ライブラリの関数は、警告は出るが「通用する」。 まぁCの導入には俺はVC薦めても良いと思うけど、 一歩進むとC99とか完全に置き去りなのがなぁ・・・
- 951 名前:12MHz [2007/08/15(水) 09:09:37 ]
- Ettercapというツールがありますが、コンソールで動作しているときにメニューを十字キーで
自由に選択できるようになっているのはどのようにして実現しているのですか?
- 952 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 10:10:50 ]
- >>951
Ettercapがどんなツールか知らないけど、 Linuxでコンソールなら、カーソルキーの入力を取って ncursesか何かで描画してるんじゃない?
- 953 名前:12MHz [2007/08/15(水) 10:32:33 ]
- kaiya.cs.shinshu-u.ac.jp/pub/c/curses/
こういうことでしょうか?
- 954 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 15:51:01 ]
- ユーザへのインタラクティブなエラーメッセージ
ログ等へのエラーの記録 この2つは、 ネストの深い位置(エラーを検出したその場所) ネストの浅い位置(何かの大きなひとまとまりの処理の結果を受け取る場所) どちらでやるのが良いのでしょうか。
- 955 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 20:44:38 ]
- 好きなほうにしろよ
- 956 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 17:05:58 ]
- >>955 ・・・好きです
- 957 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 20:48:14 ]
- そういう意味じゃない
- 958 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 20:51:54 ]
- じゃあ、どういう意味ですかー!!
私はこんなにも貴方を愛しているっていうのに!!!
- 959 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 20:56:12 ]
- 面白くないよ
- 960 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 21:14:27 ]
- つまんない奴
- 961 名前:デフォルトの名無しさん [2007/08/18(土) 22:19:42 ]
- >>856 だけど
VC++Exなんたら入れてみたけど、設定多すぎてやる気なくしたんでBCCでやってます。 えっと 異常値が出る問題だけど、ようやく解決しました。 自作のStringクラスの中にポインタをもっていてそこにnewしたメモリを紐づけている わけですが、引数としてこのStringクラスを渡すとこのクラスのコピーが作られて もちろんメモリと紐づいたポインタもコピーされて関数の終了とともにdeleteでメモリが 開放されていた。という次第です。 コピーコンストラクタなるものを作ってちゃんとメモリもコピーしてやったら直りました。 おまえら役に立たなさ杉だなwww
- 962 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 22:23:51 ]
- 理解できない頭のくせに(笑)
- 963 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 22:50:01 ]
- 自作ライブラリの不具合をソース無しで問われてもエスパー以外には回答不可かと
- 964 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 23:28:05 ]
- >>961
>862で指摘済みじゃん。しかもどんぴしゃ。
- 965 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 23:54:19 ]
- >>964
それは失礼しました。ご指摘ありがとうございます。
- 966 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 23:54:53 ]
-
- 967 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 04:22:05 ]
- プログラマー共ってもうすこし同類に優しいと思ってたらそうでもないんだな
殺伐としとる
- 968 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 04:24:26 ]
- 優しいよ。どんな戦場に居るんだ?
- 969 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 08:21:18 ]
- >>968
お手手繋いで仲良く微温湯に使っていたいのでしょうよ。 # 微温湯っつーか、泥沼?
- 970 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 12:39:48 ]
- >>961
おまえが馬鹿すぎる。 メンバ変数にポインタを持ち、デストラクタでdeleteしているのに、 浅いコピーをするデフォルト生成のコピーコンストラクタを許す(使う)だなんて。
- 971 名前:デフォルトの名無しさん [2007/08/19(日) 16:03:05 ]
- 開発環境
Windows XP SP2 VC++6.0 質問内容 Windowsでmallocを行った際の動作は 1.OSがヒープ領域をある程度大きく取る。 2.確保したヒープ領域内からmallocで指定したサイズで領域確保する。 といった2段階の処理が行われている。 という理解でたぶん合っていると思うのですが、現在組んでいるプログラムで、 for( ii = 0 ; ii < hogehoge ; ii++ ) { ・・・ /* 領域確保 */ hogenhoge->hoge[ii] = (char*)malloc( strlen(line) * sizeof(char) ); ・・・ } といった感じに文字列をメモリに格納する処理があるのですが、一部の処理で以下の現象が発生していて対応方法が見つからずに困っています。 デバックコンパイル(正常動作) -> 「1」で確保したヒープ領域を使い切った後に、新しいヒープ領域を確保しに行く 最適化コンパイル(異常動作) -> 「1」で確保したヒープ領域を使い切る前に、新しいヒープ領域を確保しに行く(見た感じでは99%使われていない) デバックコンパイルしたモジュールでは正常動作するのですが、最適化コンパイルを行った場合に上記問題が発生して途中で領域確保に失敗してプログラムが止まってしまっています。 メモリの状況をチェックするのには「VM Validator」というソフトウェアを使用しています。 問題点は最適化コンパイルしたモジュールの一部の処理でヒープ領域を無駄に確保しにいくという点です。 mallocは他の場所でもあちこちで使っているのですが、ここの部分でのみ上記現象が発生していて現在苦しんでいるところです どなたかアドバイスをよろしくおねがいします。
- 972 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 16:14:08 ]
- エスパー
hogenhoge->hoge[ii] = (char*)malloc( strlen(line) * sizeof(char) ); の部分で後からstrcpyで文字列をコピーするんだろうと思うと hogenhoge->hoge[ii] = (char*)malloc( strlen(line) * sizeof(char) + 1 ); じゃないと、終端文字分の'\0'領域がかくほされない
- 973 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 16:17:12 ]
- >>971
とりあえず、 hogenhoge->hoge[ii] = (char*)malloc( (strlen(line)+1) * sizeof(char) ); に変えてみ。
- 974 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 16:18:41 ]
- 関係ないけど、sizeof(char)はいらんだろ。
sizeof(TCHAR)とかだったら、必然性あるけど。
- 975 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 16:19:47 ]
- それにしても、C++とは思えない酷いコードだな。
- 976 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 16:21:00 ]
- >>974
いる。 あとでcharをTCHARに変えることもある。 そのときに+1なんてのはマジックナンバーになってしまう。
- 977 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 16:24:22 ]
- >>976
だったら最初からTCHARにしとけばいいじゃん。 なんのためのジェネリックテキストだよ。
- 978 名前:971 [2007/08/19(日) 17:49:31 ]
- うぉっ直りました^^;
デバック版でたまたま動いてたのはヒープ領域確保する際に初期化とかしてるのが最適化版だとしてくれないとかがあって、異なる結果になってたのかな・・・ >>975 ひどいコードですみませんorz 実のところ、掲示板に書いたコードはmallocをfor文で繰り返している部分ってのを表現したくて、その場で書いたコードだったのですが、元のコードでも指摘されたのと同じミスをしていました・・・ しかも今見なおすとforループのhogehogeと領域確保する構造体の名前がかぶっている・・・と思ったら片方はhogeとhogeの間にnが入っている・・・う〜ん質問するに当たってこんなコードのせてちゃダメですね >>974 sizeof(char)はcharが1バイトではない処理系がもしかしたらあるかもしれないので、そういう意味でこうしてます。 TCHARってのは使ったことないのですが、charとは違った文字列の持ち方をするってことかな? 勉強してみますね^^ 皆さんアドバイスありがとうございました。
- 979 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 17:53:35 ]
- >>978
charはかならず1バイト。
- 980 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 18:43:16 ]
- >>978
うつろな記憶なんで、嘘だったら誰かフォロー頼む。 デバッグビルドだとデバッグのための領域が一緒に確保される。 なので、バッファオーバーフローしても、デバッグのため領域を食いつぶして 正常に動いてるように見えることが多い。 リリースビルドだと、余分な領域を確保しないので、 オーバーフローするとわけの分からない動きをする可能性が高い。 とかそんな話だったと思う。
- 981 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 18:48:18 ]
- >>977
TCHARとして書いていないものをTCHARとして書くのは無責任だ。 だいたい意味が分かるように書くべきであって、 型のサイズが既知で変りそうもないからハードコーディングするのはおかしい。 sizeof(DWORD)なんてのも直に4と書けと言うのか?
- 982 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 18:58:11 ]
- >>978
TCHARというのはWindowsのWin32APIのマクロで、 Win32APIのUnicode版とMCBS版を透過的に使うためのもの。 実体は、 #ifdef UNICODE typedef wchar_t TCHAR; #else typedef unsigned char TCHAR; #endif こういうことになってる。 ちなみにVC++のランタイムライブラリでは、 #ifdef _UNICODE typedef wchar_t _TCHAR; #else typedef char _TCHAR; #endif ということになっている。 この2つは厳密には別物であり使い分けるべきなのだけれども、 Win32APIと関係のないところで_TCHARではなくTCHARを使う人が少なくない。
- 983 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:02:24 ]
- >>980
デバッグビルドの場合、バッファオーバーフローを検出するための仕掛けがある。 MSDNライブラリ等で _CrtCheckMemory などの一連の項目を見るといい。 簡単に言うと、余分にメモリを確保して、そこに特別な値を書き込んでおき、 その値が変っているかどうかをチェックして、バッファオーバーフローを検出する。 VC++6.0のIDE上でデバッグモードで動かしていれば、 プロセスが終了する間際に、トレースの所に何かメッセージが出ていたと思うよ。
- 984 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:05:48 ]
- >>981
もちろんほかの箇所もTCAHR使うって前提だよ。 >>976 の「あとでsizeof(TCHAR)にすることもある」って話も、そこだけ変えるんじゃないだろ? ハードコーディングしろって話じゃなくて、sizeof(char)は1だと決まってるんだから、そもそも、いらないって話だよ。 あとでsizeof(TCHAR)に書き直すくらいなら、最初からそう書いておけばいい。
- 985 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:17:14 ]
- >>984
ただ単に 1 と書いたら、意味がわかりにくい。 もう一度聞くが、 sizeof(DWORD)も4と書くのか?
- 986 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:18:26 ]
- 誰が1や4と書くなんて書いとんねん
つまらない事で言い合いスンナ!
- 987 名前:971 [2007/08/19(日) 19:19:18 ]
- >>980
おお〜なんか納得できる^^ sizeof(char)に関しては、>>981さんの考え方に近いかな〜 昔32bit -> 64bitの移植に携わったことがあって、その時にちと苦しめられたので明示的に書くようにしてます^^ 具体的にはポインタの領域確保するのに、(たぶん組んだ人は動きゃいいやという考え方で適当に組んでいたダメ人間)sizeof(int)使って領域確保してて、 32bitだとポインタもintも両方同じ4バイトだからちゃんと動作するんだけど、 64bitではポインタだけ8バイトに変わるから、そこの部分でエラーが出て、 しかもコピーして使いまわしたらしく同じようなコードがあちこちに点在してて・・・ 今となってはいい思い出だけど、あれは大変だったなぁ〜(-_-;) 今回のケースとは大分違うんだけど、明示的に書いておいた方が将来的にどんなふうに仕様が変化するか分からないし安全だなぁ〜って教訓からこうしてます^^
- 988 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:25:16 ]
- TCHARも知らん分際で何ホザいとんねん
- 989 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:27:16 ]
- >>985
だから「いらない」って言ってるじゃん。 malloc(strlen(s) * 1) こんな書き方しろなんて言ってないよ。
- 990 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:30:02 ]
- >>987
intとcharは、事情が違うよ。
- 991 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:39:00 ]
- もうスレが終わりそうだからマトメ
(a) malloc(tcslen(s) * sizeof(TCHAR)) なら普通の書き方。 (b) malloc(strlen(s) * sizeof(char)) のsizeof(char)は意味がない。 あとでcharをTCHARに変えるかもって想定してるなら、この使い方はマジックナンバーを 埋め込んでるより多少はマシだけど、まあ大差ないレベル。 最初から (a)の書き方をするべき。
- 992 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:42:26 ]
- >>989
malloc(strlen(s)+1) こんな書き方をしたら、気持ち悪いだろ。 mallocが受け取るのは「文字数」ではなく「バイト数」だ。 strlenが返すのは「バイト数」ではなく「文字数」だ。それは+1しても、「文字数」のままだ。 「バイト数」を受け取るところに、「文字数」を渡すのは、気持ち悪すぎる。 sizeof(char)に「文字数」を掛けることで、適切に「文字数」を「バイト数」に変換できる。 だから、たとえsizeof(char)が1だとわかりきっていても、それを省略すべきではない。
- 993 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:43:53 ]
- >>991
99%の確率でバグっているコードを「普通の書き方」なんて言うな。
- 994 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:48:17 ]
- >sizeof(char)に「文字数」を掛けることで、適切に「文字数」を「バイト数」に変換できる。
いいえ。
- 995 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:48:32 ]
- ツマンネェ奴ら
- 996 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:49:00 ]
- >>977 は >>974 でしょ?
元もとstrlenだけで十分だと言ってるんだと思うが... もし、つけるんだったらsizeof(*line) じゃだめか?
- 997 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:52:37 ]
- >>993
元のコードにあわせただけ。 この話の本筋とは関係ないし。 マイナーな本でsizeof(char)を使えって薦めてるのを見たことあるけど、 まあ、こういうスタイルは、圧倒的に少数派。 こんなクセのある書き方を推奨するやつは、コードを読んで無さ杉。
- 998 名前:971 [2007/08/19(日) 19:54:19 ]
- なんかスレが荒れてしまって申し訳ないです。
皆さん善意で書き込んでくださっているわけなので、感謝してます。 ただ個々人で使用し続けてきたコーディングのスタイルがあって、それでいい争いになってしまっていて、すれが険悪になってしまって申し訳ありません。 今回の件ではバグが取れたという以外にも、文字列絡みの処理に対して再勉強する機会になったのでよかったです。
- 999 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:55:25 ]
- ↓1000
- 1000 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 20:02:37 ]
- 呼んだ?
- 1001 名前:1001 [Over 1000 Thread]
- このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
|

|