【初心者歓迎】C/C++室 Ver.38【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/06/03(日) 22:33:55ただしその場合、質問者は必ず、環境を書きましょう。
※sage禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.37【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1178432985/l50
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0153デフォルトの名無しさん
2007/06/07(木) 09:53:37そんな隙だらけの説明しかできないんならヌルポインタについて語るのはやめとけ。
↓これでいいだろ。
http://www.kouno.jp/home/c_faq/c5.html
0154デフォルトの名無しさん
2007/06/07(木) 09:57:540155デフォルトの名無しさん
2007/06/07(木) 10:10:02>ただ、これだけだと整数型とか小数型の値としてもとれるから、
これは、
#ただ、これだけだと「プログラムを読む人間」 が、この 0 が
#数値の 0 か、ヌルポインタの 0 かを、そこからだけでは読み取れないので、
という風な意味。
0156デフォルトの名無しさん
2007/06/07(木) 10:13:430157デフォルトの名無しさん
2007/06/07(木) 10:18:000158デフォルトの名無しさん
2007/06/07(木) 10:25:380159デフォルトの名無しさん
2007/06/07(木) 10:33:510160デフォルトの名無しさん
2007/06/07(木) 10:54:040161デフォルトの名無しさん
2007/06/07(木) 14:32:34{
struct st* a;
get(&a); /* callocで構造体配列作成しaに割り当て */
free(a);
}
これをコンパイルすると、syntax error: missing';' before 'type'
とでます。アドバイスを頂けないでしょうか。お願いします。
0162デフォルトの名無しさん
2007/06/07(木) 14:36:43のようです。しかし、freeのときにエラーが出るのがわからなく
その件について助言お願い致します。
0163デフォルトの名無しさん
2007/06/07(木) 14:42:07その原因の行も書いてよ。
自分がコンパイラになったつもりでたどればわかる
0164デフォルトの名無しさん
2007/06/07(木) 14:47:380165デフォルトの名無しさん
2007/06/07(木) 14:49:080166デフォルトの名無しさん
2007/06/07(木) 15:18:12if(FALSE)break;
struct st* a;
get(&a);
free(a);
だとコンパイルできなくて
struct st* a;
if(FALSE)break;
get(&a);
free(a);
だと実行時エラー。
struct st* a = NULL;
if(FALSE)break;
get(&a);
free(a);
で解決しました。C言語に慣れておらずいまいち理解できないので
すごく変な勘違いしてそうですね…。
0167デフォルトの名無しさん
2007/06/07(木) 15:27:24実行時エラーは何か勘違いしてる
0168デフォルトの名無しさん
2007/06/07(木) 15:32:370169デフォルトの名無しさん
2007/06/07(木) 15:32:46あれは未初期化ポインタに対するアクセスのエラーだから
リリースビルドにすれば実行時に落ちることは無い
しかしその前にコンパイラの方で未初期化に対するどうたらこうたらっていう
警告が出るはずなんだが…
0170デフォルトの名無しさん
2007/06/07(木) 15:34:10get で &つけて呼び出してるから、警告は出ないんじゃないかな。
その関数で代入失敗してるっぽい。
0171デフォルトの名無しさん
2007/06/07(木) 15:38:09試しにそうしたら確かに通っちゃったよ…
0172デフォルトの名無しさん
2007/06/07(木) 15:41:04(リンクの段階で出てくるのが リンクエラー)
出来上がった実行ファイルを実行して出てくるのが 実行時エラー
m(c)alloc で得られたポインタではない非NULL 値を realloc しようとしたんじゃねーかな?
0173デフォルトの名無しさん
2007/06/07(木) 15:44:43get(struct st**) の実装晒したほうが早いぞ
0174デフォルトの名無しさん
2007/06/07(木) 15:52:12確認したところキャストはされていませんでした。
ブロックの先頭・値初期化の不備は、お恥ずかしいミスです。
ところで、C++てエラーメッセージがわかりにくくないですか?
関数や引数のクイックインフォも出なくて、難しすぎて泣けてきます。
0175デフォルトの名無しさん
2007/06/07(木) 15:56:37getの仕様によるけどな。
0176デフォルトの名無しさん
2007/06/07(木) 15:59:17ことでしょうか?でも多分、get()には問題はないはずです。
たった4行のコードでここまで悩める俺みたいなバカは
プログラマに向いてないんでしょうねorz
0177デフォルトの名無しさん
2007/06/07(木) 16:08:38だったら get(arg) の仕様は?
第一引数 arg の内容を書き換えるだけ ならば、
NULL 初期化しなくても、実行時エラーは出ないつくりになる(はず)。
第一引数 arg の内容を確認してから書き換える ならば、
NULL 初期化が必須になるだろう。
この違いは get() を作った奴が指示すべきで、それを利用する側は、
その指示に従うしかない。 (で、その指示がない場合は作った奴を呪う)
0178デフォルトの名無しさん
2007/06/07(木) 18:47:58それをC言語で使用するにはどうすればいいのでしょうか?
具体的に言いますと、とりあえずexeファイルにa.txtをD&Dしたらそのディレクトリに
copy_a.txtというファイルを作成したりしたいです。コマンドプロンプトでいうとcp a.txt copy_a.txtですね。
まぁやりたいのはcpコマンドではなくて、javacコマンドとjavaコマンドなのですが・・・。
0179デフォルトの名無しさん
2007/06/07(木) 18:51:140180178
2007/06/07(木) 18:51:420182デフォルトの名無しさん
2007/06/07(木) 19:19:13でエラーが出るのですが、何か書式を間違ってるでしょうか?
文字列を最後まで1文字ずつ取得して、文字数を数えるプログラムを作ろうとしています。
最後取得したら\0がbufに入ると思うのですが、上の文でエラーが・・・
0183デフォルトの名無しさん
2007/06/07(木) 19:23:49http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strcmp.3.html
引数の型が違う。(というかたぶんstrcmp()が何をする関数なのか勘違いしている)
0184デフォルトの名無しさん
2007/06/07(木) 19:26:230185デフォルトの名無しさん
2007/06/07(木) 19:37:02とりあえずnullmoji[2]に'\0'を入れてstrcmpをしたら正常に動作しました。
ありがとうございました。
>>184
そういう課題なんです・・・
0186デフォルトの名無しさん
2007/06/07(木) 19:42:50#define Public public:
#define Private private:
#define Protected protected:
って定義して、んでヘッダファイルを
Public int getNum();
Public void setNum(int num);
みたいに書いてみたんだけど、これと似たようなことをやる人は多い?
それとも明らかにC++の常識からは外れた書き方?
0187デフォルトの名無しさん
2007/06/07(木) 19:46:56なにより読みにくいし、なら java でかけよと言いたい
0188デフォルトの名無しさん
2007/06/07(木) 19:52:34m9( ´,_‥`)プッ
0189デフォルトの名無しさん
2007/06/07(木) 19:56:46Javaってpublicだのprivateだのの先頭、いつから大文字で書くようになったんだ
0190デフォルトの名無しさん
2007/06/07(木) 19:57:08PASCAL風に
#define BEGIN }
#define END }
なんてやられたソースをおまえは許せるんだな?
0191デフォルトの名無しさん
2007/06/07(木) 19:59:41シェルを書いたのは(勿論悪い意味で)有名
0192デフォルトの名無しさん
2007/06/07(木) 20:20:55関数一覧をカテゴリ別に並べて書きたくて……
>>188
(´・ω・`)
>>189
いや先頭が小文字のpublicとかは予約語なんで
>>190
……ええと、すいません
0193デフォルトの名無しさん
2007/06/07(木) 20:23:510194デフォルトの名無しさん
2007/06/07(木) 20:26:05とかできるんだぜ。
0195デフォルトの名無しさん
2007/06/07(木) 20:29:36やるな。
理由は色々あるが、一番実害があるのはこんなところか。
#define public public:
としたとして、
class A {
public void foo();
void bar();
};
の bar のアクセス指定がどうなるか考えてみよう。
これは public だ。
だが、見た目から直感的に感じるのは private だろう。
こういう齟齬が発生するから、してはいけない。
0196デフォルトの名無しさん
2007/06/07(木) 20:29:41あほすぎw
0197デフォルトの名無しさん
2007/06/07(木) 20:37:01for (int i=0; ...) {
// スコープ1
}
// スコープ2
でi がスコープ2 まで有効な特殊系(VCだなっ) を回避する常套句ですな
0198デフォルトの名無しさん
2007/06/07(木) 20:41:400199デフォルトの名無しさん
2007/06/07(木) 22:09:010200デフォルトの名無しさん
2007/06/07(木) 23:01:19public: void Hoge()なんてコードを出していた気がする
0201デフォルトの名無しさん
2007/06/07(木) 23:03:36それが仕様だったかも知れないが、規格にはなっていない罠。
0202デフォルトの名無しさん
2007/06/07(木) 23:06:05それでもなってないの?
0203デフォルトの名無しさん
2007/06/07(木) 23:07:51規格になっていたと言うがいい
0204デフォルトの名無しさん
2007/06/07(木) 23:26:130205178
2007/06/07(木) 23:43:26system("cd c:\\java");
system("java HelloWorld");
で実行したみたのですが、
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
と出てしまいます。普通にコマンドプロンプトでcd c:\javaとjava HelloWorldを打ち込んだときは
正常に動作するのですが、何かsystemでやるときに特別に何かしなければいけない事があるのでしょうか?
0206178
2007/06/07(木) 23:49:32system("dir")を実行したら、javaディレクトリが表示されずに、
プロジェクトのディレクトリが表示されるのですが・・・
0207デフォルトの名無しさん
2007/06/07(木) 23:52:220208デフォルトの名無しさん
2007/06/07(木) 23:52:571度のsystem呼出で済ませるようにしろ
絶対パスで指定するとか、バッチファイルを作ってそれをsystemで呼ぶとか
0209178
2007/06/07(木) 23:56:35とりあえずsystem("java c:\\java\\HelloWorld");で実行してみたのですが、やはり
Exception in thread "main" java.lang.NoClassDefFoundError: c:\java\HelloWorld
と出てしまいます。う〜ん・・・
0210178
2007/06/08(金) 00:06:01は普通に実行できてるっぽいです。javaコマンドだけ何で出来ないのかな;;
0211デフォルトの名無しさん
2007/06/08(金) 00:12:18それとも区切り文字か。
ってことで、system("cd c:\\java; java HelloWord")とsystem("java c:/java/HelloWordl")を試して味噌。
0212デフォルトの名無しさん
2007/06/08(金) 00:21:010213デフォルトの名無しさん
2007/06/08(金) 09:35:51普通はそれを最初にやるわな
0214デフォルトの名無しさん
2007/06/08(金) 10:47:42(関数内で参照をいくつか用いると、それだけスタック使うことになりますか?)
0215デフォルトの名無しさん
2007/06/08(金) 10:55:06質問の意図が読めんが…
関数の引数で
値渡しした場合には 値が持つ大きさ だけスタックに詰まれる
参照渡しした場合には ポインタが持つ大きさ だけスタックに詰まれる
0216デフォルトの名無しさん
2007/06/08(金) 11:34:37通常変数がスタックを消費する保証はない。
まして、参照変数がスタックを消費するかどうかはコンパイラ次第。
0217178
2007/06/08(金) 12:13:26おぉ・・・出来ませんでした・・・。何でだろう・・・。
javaコマンドはそのカレントディレクトリにあるファイルに対してしか実行できないとか・・・?
0218178
2007/06/08(金) 12:19:35system("cd c:\\java; java HelloWorld");
だと、指定されたパスが見つかりませんと出ます。
system("java c:/java/HelloWordl");
だと、Exception in thread "main" java.lang.NoClassDefFoundError: c:/java/HelloWorld
う〜ん・・・
0219178
2007/06/08(金) 12:23:46などは正常に動作するようです。やはりjavaコマンドの仕様なのでしょうか・・・;;
0220デフォルトの名無しさん
2007/06/08(金) 12:32:11まあカレントディレクトリの移動などは、SetCurrentDirectory() 使えばいい
0221178
2007/06/08(金) 12:44:54ありがとうございます。どうやら僕の勉強不足のようですね。しかし、
SetCurrentDirectory((LPCWSTR)"c:\\JAVA");
としても、カレントディレクトリが変わったような動作はしないのですが・・・。
その後dirコマンドを打ったら、やはりプロジェクトのディレクトリが表示されます。
0222デフォルトの名無しさん
2007/06/08(金) 12:48:210223デフォルトの名無しさん
2007/06/08(金) 12:49:32SetCurrentDirectory(L"c:\\JAVA");
じゃ…
0224178
2007/06/08(金) 12:53:25とりあえずプロジェクトのプロパティの文字設定をUnicodeから設定なしに変更しました。
その後、SetCurrentDirectory((LPCWSTR)"c:\\JAVA");をSetCurrentDirectory("c:\\JAVA");
に変更し、system("dir")をしたところ、JAVAディレクトリが表示されました。
それを確かめた上で、system("java HelloWorld");を行ったら無事実行する事が出来ました。
原因がよく理解出来ないのですが、とりあえず動作できたのでいいのかな・・・。
ありがとうございました。
0225デフォルトの名無しさん
2007/06/08(金) 13:32:56エラーが出るからってとりあえずキャストすんのはやめとけ
0226デフォルトの名無しさん
2007/06/08(金) 13:42:37system("java c:/java/HelloWordl");
これだけど、
system("java -classpath c:/java HelloWordl");
これなら動くんじゃないか?
HelloWordl の綴りが気になるが
0227178
2007/06/08(金) 13:54:53丁寧にありがとうございます。キャストはあまりしないほうがいいみたいですね。
現在はchar型の変数にパスを入れて、SetCurrentDirectory(dirPass);のようにしているのですが、
やはりそれだと動作が微妙です。引数はcharじゃなくてLPCTSTR(?)じゃないといけないのかな
とか思いつつ奮闘しています。
>>226
一応-classpath(-cp)も使って実行してみたのですが、確か出来なかったです。
HelloWorldの綴りが>>211で間違ってるのにも実は気付いていて、ちゃんと綴りを直して実行しました。
0228デフォルトの名無しさん
2007/06/08(金) 13:56:31classpath の指定と HelloWordl の間にはスペースがあるんだけどわかってる?
0229デフォルトの名無しさん
2007/06/08(金) 14:00:32http://www.google.co.jp/search?q=hellowordl&lr=lang_ja
0230178
2007/06/08(金) 14:04:28あ、大丈夫です。ちゃんと半角スペース入れています。
あと、どうやら>>227のSetCurrentDirectory()は引数の型とかの問題じゃなかったです。
むしろ何も問題は起きてませんでした・・・(´・ω・`)
どうやらstrncat(dirPass, &argv[0][0], point);を実行した後にsystemコマンドが使えないです。
system("dir");を実行しただけでエラーが・・・。
0231デフォルトの名無しさん
2007/06/08(金) 14:10:49ちゃんとコピペしてやってみたのかよ
そもそも、これがおかしいんだよ→ c:/java/HelloWordl
ここはファイルを指定するんじゃなくてクラス名を指定するの
パス名がクラスの階層を表してはいるけどな
>system("dir");を実行しただけでエラーが・・・。
ふーん
0233デフォルトの名無しさん
2007/06/08(金) 14:32:47うちでは動いてるけど、君のトコでは動かないんだね
0234デフォルトの名無しさん
2007/06/08(金) 14:44:31どこか壊してるんでしょう。
dirPassはちゃんと文字列を置ける所を指してる?
(argv[0]って自分の名前なんだけど、それで何するんだろ?)
0235178
2007/06/08(金) 15:16:42そういう次元でもないような・・・。
>>234
dirPassをprintfで表示させたらちゃんと目的のものを表示してくれました。
とりあえず手法を変えて、argv[0][point]に\0を入れてstrcpyしてみたらsystem("dir")が正常に動作しました。
一体何だったのでしょう・・・。argv[0]は最終的にはargv[1]に置換する予定ですw
0236デフォルトの名無しさん
2007/06/08(金) 15:18:420237デフォルトの名無しさん
2007/06/08(金) 15:19:58複数コマンドだとしてもバッチファイルで済むレベルの内容じゃないのか?
無理矢理Cで作ろうとするほうが疑問なんだが・・・
0238178
2007/06/08(金) 15:30:47ヤバイ・・・全然皮肉が伝わってなかったらしいです;;
言われても気付けない俺はバカかもしれない・・・
まぁ、逆に考えれば幸せな人なのかもしれないから良いか(`・ω・´)ふふふ
>>237
やろうとしていることは、D&Dで.javaを渡したらコンパイル、.classを渡したらそれを実行するプログラムです。
もしかしたらもっと簡単で楽な方法があるんですかね・・・。バッチファイルとか分からないので後でググッておきます。
JAVAを昨日から勉強しようと思ったのですが、いちいちコマンドプロンプトでディレクトリ移動したり
javaコマンド打ったりするのが面倒だと思って・・・。↑押せば前のコマンドは出てきますけど、それさえも面倒で・・・。
というか、コマンドプロンプトでコマンド打つのが嫌いなんです;;
そして、今大体プログラムは完成したっぽいです。
0239デフォルトの名無しさん
2007/06/08(金) 15:32:320240デフォルトの名無しさん
2007/06/08(金) 17:32:11printf("%d\n", Fd)としたら値が変化しません・・・
struct ffblk Fd;
findfirst("*", &Fd, 55);
do {
printf("%s\n", Fd.ff_name);
}
while(!findnext(&Fd));
0241デフォルトの名無しさん
2007/06/08(金) 17:45:49何も分からない
0242デフォルトの名無しさん
2007/06/08(金) 17:48:57再帰を使わずにディレクトリ内のファイルを出力したいのですが
ディレクトリを進めたときに上ディレクトリで何処まで読んだかを記録しておきたいんです
0243デフォルトの名無しさん
2007/06/08(金) 17:50:47B_dir
C_dir
というディレクトリがあったとき、B_dirを調べ終わったとき
次にC_dirを検索するにはどのデータを保存しておけば良いんですか??
0244デフォルトの名無しさん
2007/06/08(金) 17:59:58関数を再帰的に書けば良いじゃん
0245デフォルトの名無しさん
2007/06/08(金) 18:05:38再帰を使いたくないんです・・・
0246デフォルトの名無しさん
2007/06/08(金) 18:07:080247デフォルトの名無しさん
2007/06/08(金) 18:09:330248デフォルトの名無しさん
2007/06/08(金) 18:10:05ttp://ja.wikipedia.org/wiki/%E6%9C%AB%E5%B0%BE%E5%86%8D%E5%B8%B0
0249デフォルトの名無しさん
2007/06/08(金) 18:13:57>>247 struct ffblk Fd , Fe; としてFe = Fdと記録してみましたがた゛めでした
0250デフォルトの名無しさん
2007/06/08(金) 18:19:050251デフォルトの名無しさん
2007/06/08(金) 18:19:210252デフォルトの名無しさん
2007/06/08(金) 18:21:44■ このスレッドは過去ログ倉庫に格納されています