09/02/24 16:17:40
>>176
答えはsizeof( A )だろ
179:デフォルトの名無しさん
09/02/24 19:12:55
>>178
お前まぢ頭いいな
180:デフォルトの名無しさん
09/02/24 19:43:18
('A`)に見えた
181:デフォルトの名無しさん
09/02/24 19:44:54
sizeof に目がなくて
182:デフォルトの名無しさん
09/02/24 20:08:55
sizeof('A`)だと8なのでやはり8が答えみたいですね
ありがとうございました。
183:デフォルトの名無しさん
09/02/24 22:27:13
>>182
俺の環境では5になるんだが
184:デフォルトの名無しさん
09/02/24 23:19:58
>>182 環境依存
#include<stdio.h>
#define MACRO(type) printf("sizeof(%s)=%d\n", #type, sizeof(type))
#pragma pack(push, 1)
struct pack1{
char a;
int b;
};
#pragma pack(pop)
#pragma pack(push, 2)
struct pack2{
char a;
int b;
};
#pragma pack(pop)
#pragma pack(push, 4)
struct pack4{
char a;
int b;
};
#pragma pack(pop)
int main(void){
MACRO(struct pack1);
MACRO(struct pack2);
MACRO(struct pack4);
return 0;
}
185:デフォルトの名無しさん
09/02/25 01:13:18
なんと…
処理系依存なのでどれも正解ということですか!
コードまでご丁寧にありがとうございました。
186:デフォルトの名無しさん
09/02/25 09:51:49
処理系というか、自分で決められるといった方が正しい
187:デフォルトの名無しさん
09/02/25 11:38:22
#include <stdio.h>
#include <string.h>
struct address{
char name[20];
char jusyo[21];
int age;
};
int main(void)
{
struct address abc;
int s = 1;
if(s = 1){
char name[30];
char jusyo[70];
int age;
printf("名前? "); scanf("%s", &name);
printf("住所? "); scanf("%s", &jusyo);
printf("年齢? "); scanf("%d", &age);
abc.age = age;
strcpy(abc.name, jusyo);
}
return(0);
}
C言語を学習しています。
上プログラムでキーボードから日本語を入力し出力させたいのですが、どうすればいいのでしょうか?
Cygwinを使っています。
188:デフォルトの名無しさん
09/02/25 11:47:00
printf使えば良い
189:デフォルトの名無しさん
09/02/25 11:47:45
>>187
やったことないけど
URLリンク(pinoki.la.coocan.jp)
190:デフォルトの名無しさん
09/02/25 12:08:46
>>187
cygwin自体が日本語の入出力をできない状態なら>189へ。
gccのコンパイルオプションについて知りたいならcygwinスレへ。
まぁ、動くかどうかは兎も角scanf()の使い方も間違っているわけだが。
使わないに越したことはないが、scanf("%29s", name)とするのが無難。
191:デフォルトの名無しさん
09/02/25 12:11:18
構造体のメンバとローカル変数の配列サイズが違うじゃん。それは拙いっしょ。
192:デフォルトの名無しさん
09/02/25 15:13:30
1>LINK : warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
1>libcpmtd.lib(xdebug.obj) : error LNK2019: 未解決の外部シンボル __malloc_dbg が関数 "void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。
1>libcpmtd.lib(xdebug.obj) : error LNK2019: 未解決の外部シンボル __free_dbg が関数 "void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)" (??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。
1>C:\Documents and Settings\\デスクトップ\Game\ActionGame\/GameAppli\ActionGame.exe : fatal error LNK1120: 外部参照 2 が未解決です。
#include <fstream>
をインクルードすると上記のエラーが出ます
どうすればいいのですか;;
193:デフォルトの名無しさん
09/02/25 15:24:46
プロジェクトのプロパティ→C/C++→コード生成→ランタイムライブラリ
を、どれか正しいものに変更する
なんか他の外部ライブラリ使ってるだろ?
194:デフォルトの名無しさん
09/02/25 15:26:17
デバッグ版とリリース版のオブジェクトが混在しているように見える
いったんすべてのオブジェクトを削除してビルドしなおせばいい
ほかから持ってきたライブラリ結合してるならリンクオプションをそれにあわせる
195:デフォルトの名無しさん
09/02/26 06:44:15
staticメンバ関数を利用するメリットってあるんでしょうか?
196:195
09/02/26 06:51:07
すいません
スレ移動します
197:195 ◆Ci3UmwhFqY
09/02/26 07:18:27
>>196 は他人です
198:デフォルトの名無しさん
09/02/26 10:37:07
何でメリットがないと思ったのか、それが知りたい。
199:デフォルトの名無しさん
09/02/26 12:19:36
つnew, singleton
200:デフォルトの名無しさん
09/02/26 12:23:18
コールバック関数のポインタを取るCスタイルのAPIへなんとかしてクラスを配送したいときに
201:デフォルトの名無しさん
09/02/27 02:01:54
質問です。
class Foo { void Bar(void* ptr); };
void Foo::Bar(void* const ptr) {}
VisualC++2008 にてこの様なクラスを作ったところ、コンパイルエラーも警告も出ずにコンパイルが通りました。
疑問に思ったのは Foo::Bar の引数を、void* から void* const に変えてもエラーが出ない事です。
これは文法的に正しいんでしょうか?それともVC++の独自拡張だったりするんでしょうか。
202:デフォルトの名無しさん
09/02/27 02:10:38
文法的にOK
203:デフォルトの名無しさん
09/02/27 02:21:40
>>201
class Foo { void Bar(int ptr); };
void Foo::Bar(int const ptr) {}
が問題ないのと同じこと。
204:デフォルトの名無しさん
09/02/27 02:51:20
>>202-203
仮引数にconstをつけるのは実装と宣言で違っても文法的に問題無いのですね。
勉強になりました、ありがとうございました。
205:デフォルトの名無しさん
09/02/28 05:09:10
とても基本的なことなのですが、
符号なし整数の変数で与えられた数 N - 1 から 0 まで順番に処理をするループは、どう書くのが一般的ですか。
for (size_t i = N - 1; i >= 0; --i) だとダメですよね。
自分が考えた書き方は、
const size_t N = ...;
for (size_t i = N; i > 0; --i) hoge(i - 1);
for (size_t i = 0; i < N; ++i) hoge(N - i - 1);
for (size_t i = N - 1; i != ~0; --i) hoge(i);
ですが、どれも使われるのでしょうか。
206:デフォルトの名無しさん
09/02/28 05:13:20
size_t i = N;
do { --i; hoge(i); } while (i > 0);
207:206
09/02/28 05:14:35
ああ、書いてから気づいたけど >>206 は N が初めから 0 だったらダメだね
208:デフォルトの名無しさん
09/02/28 05:36:00
T i = M; //M = N - 1ということで
do {
hoge(i);
} while (i-- != 0);
これだと、MがT型の最大値でも対応できるはず。
209:デフォルトの名無しさん
09/02/28 06:46:33
>>205
普通に for (size_t i = N - 1; i >= 0; --i) を使ってるけど
size_tを使う理由が分からない
210:デフォルトの名無しさん
09/02/28 08:29:35
>>209
メモリのサイズを意味するときはsize_tを使うようにしてる
64ビット環境だとunsigned long longになるのかな
211:デフォルトの名無しさん
09/02/28 11:52:40
>>209
> i >= 0;
↑は符合無しだと常に真だろ。
212:デフォルトの名無しさん
09/02/28 11:53:48
何か問題でも?
213:デフォルトの名無しさん
09/02/28 11:54:56
for (i = 0; i > N; ++i) {;} // ループ中に前後の値が影響しない場合。
if (N > 0) for (i = N - 1; i >= 0; --i) {;} // ループ中に前後の値が関わってくる場合。
while 系をカウントループに使うのは愚策と考える。
214:デフォルトの名無しさん
09/02/28 12:02:05
>>212
やめられない、とまらない
215:デフォルトの名無しさん
09/02/28 12:33:44
while(N-->0)は普通に使うだろ
--が矢印に見えるから「Nを0にするまで」って視覚的にわかりやすいじゃん
216:デフォルトの名無しさん
09/02/28 12:39:17
その考えはなかった
217:デフォルトの名無しさん
09/02/28 12:43:37
>>215
そんな餌にクマー
まあでも>>205の要求にあってるしシンプルでわかりやすいな
218:デフォルトの名無しさん
09/02/28 13:16:49
>>215
ああ、意外と面白い使い方かも・・・
視覚的にわかり易く書かない場合は
>0は書かなくても大丈夫か
219:デフォルトの名無しさん
09/02/28 14:09:16
有名だろ、それ
220:デフォルトの名無しさん
09/02/28 14:16:21
ぶっちゃけ初めて見た
221:デフォルトの名無しさん
09/02/28 14:20:36
ソース自体は見た事があるような気もするけど、考え方は初めて見た。
222:デフォルトの名無しさん
09/02/28 16:14:42
減少していくのに減少していく方向が空いてるのはなんとなく怖いなぁ
223:デフォルトの名無しさん
09/02/28 17:18:11
>>215
while(N-->0) って見た目が素敵だな
224:デフォルトの名無しさん
09/02/28 17:23:55
AAのプログラム言語とかなら、見た目で分かりやすいかもな・・・
225:デフォルトの名無しさん
09/02/28 17:39:46
befungeのことですね!!
226:デフォルトの名無しさん
09/02/28 17:41:03
面白そうだけど絶対コーディングしにくいな
ほぼ記号だろw
227:デフォルトの名無しさん
09/02/28 20:31:33
さすがショートコーディングスレ。
ためにな・・・って、あれ?
228:デフォルトの名無しさん
09/03/01 18:45:19
繰り返し処理のことを何ていいますか?
専門的にお願いします。
229:デフォルトの名無しさん
09/03/01 18:49:47
反復処理とか繰り返し処理とか
230:デフォルトの名無しさん
09/03/01 20:00:35
繰り返し処理のことを何ていいますか?
専門的にお願いします。
231:デフォルトの名無しさん
09/03/01 20:01:14
反復処理とか繰り返し処理とか
232:デフォルトの名無しさん
09/03/01 20:38:29
>>210
メモリのサイズを入れる型ってsize_t以外になんかなかった?
233:デフォルトの名無しさん
09/03/01 20:50:58
繰り返し処理のことを何ていいますか?
専門的にお願いします。
234:デフォルトの名無しさん
09/03/01 20:55:57
ループ処理じゃね?w
反復も繰り返しだろうけど、お前は違い分からないだろう
235:デフォルトの名無しさん
09/03/01 21:26:00
ぶっちゃけC/C++の話じゃないからスレ違い
236:デフォルトの名無しさん
09/03/01 21:29:11
>>234>>231>>229
もうちょっとかっこいい言い方あるだろ
それを教えろ
237:デフォルトの名無しさん
09/03/01 21:31:09
>>236
死ねハゲ
238:デフォルトの名無しさん
09/03/01 21:31:47
反復処理とか繰り返し処理とか
239:デフォルトの名無しさん
09/03/01 21:47:20
リピート
240:デフォルトの名無しさん
09/03/01 22:14:30
>>228-231
見事な繰り返し処理
>>232は空気嫁
241:デフォルトの名無しさん
09/03/01 22:19:39
>>232
ssize_tとか、でもCでもC++でも標準ではないけど。
242:デフォルトの名無しさん
09/03/01 22:24:27
>>232
ptrdiff_tのこと?ポインタ同士の引き算の型だからちょっと違うが
243:デフォルトの名無しさん
09/03/01 22:34:14
>>241 >>242
そうだな。size_tでよかった。
244:デフォルトの名無しさん
09/03/03 05:50:11
まだ初心者なのですが、batファイルをC++builder6で
ボタンを押したら実行するようにしたいので
ShellExecute(Handle,"open",ファイル名.c_str,NULL,NULL,SW_SHOW);
と書いたのですが、うまくいきません・・・どなたか教えてくださいOTL
245:デフォルトの名無しさん
09/03/03 06:13:52
>>244
何故、どう巧くいかないのか書かないのですか?
246:デフォルトの名無しさん
09/03/03 06:28:56
実行はされるのですが(コマンドプロントが一瞬表示される)
バッチファイルの中身自体が実行されません;;
247:デフォルトの名無しさん
09/03/03 06:39:59
batの最後に
pause
入れとけ
248:デフォルトの名無しさん
09/03/03 07:00:46
>>247
ありがとうございます。
やってみたところ指定されたパスがありませんとのことでした。
普通にbatファイルを起動すると何も問題がないのですが・・・
原因などわからないでしょうか?
249:デフォルトの名無しさん
09/03/03 07:08:14
ファイルパスをちゃんと指定すればいいじゃん・・・
250:デフォルトの名無しさん
09/03/03 07:12:19
できました!
こんな時間に、質問に答えてくださりありがとうございました
大変助かりました。
251:デフォルトの名無しさん
09/03/03 18:34:32
以下のような感じで「*」の前後にスペースが
入っている場合もポインタの宣言なんでしょうか?
static unsigned int * ADDR;
スペースが、後だけのもは参考書にも紹介されていますが
前後両方ともスペースのものは見つかりませんでした。
よろしくお願いいたします。
252:デフォルトの名無しさん
09/03/03 19:01:49
vector<string> * const (&u)[buf]; // こんな感じですか?
253:デフォルトの名無しさん
09/03/03 19:06:04
>>251
おんなじ。空白類がいくらあろうと関係ない。
254:デフォルトの名無しさん
09/03/03 19:47:28
>>252
static unsigned int * ADDR;
全くこのままのコードです。
>>253
ご回答有難う御座いました。
もやもやしていましたが、これですっきりしました。
255:デフォルトの名無しさん
09/03/04 03:11:45
VC++9の質問です。Unicode環境で
Void Func(LPCSTR pMsg);
みたいな関数があって、ここに文字列を渡すのですが、
Func("xxx");
というように普通に書くと問題ないのですが、
Func(_T("xxx"));
とやると、
const wchar_t[3] から LPCSTRに変換できません、みたいなエラーが出ます。
全ての文字列を_T("") で括ればいいのかと思ってたのですが、違うのでしょうか?
256:デフォルトの名無しさん
09/03/04 03:14:42
>>255
_Tで括るのはLPC"T"STRのとき。
LPCSTRはconst char*のtypedefだから_Tは要らない。
257:デフォルトの名無しさん
09/03/04 03:25:58
>>256
なるほど、ありがとうございました。
258:デフォルトの名無しさん
09/03/04 13:36:24
初歩的過ぎてすいませんが...
すでに宣言してある配列の配列数を求めて
それと同じ配列数の配列を宣言するには
どうすればいいですか?
よろしくお願いします。
259:デフォルトの名無しさん
09/03/04 13:39:38
>>258
配列数はプログラム書いた人しか知らないから無理
それができたら配列のオーバーフロー管理も楽なんだけど
260:デフォルトの名無しさん
09/03/04 13:44:40
>>258
状況がよくわからん
261:259
09/03/04 13:44:42
sizeof(配列) / sizeof(型)
でいいか
マクロで定義して同じマクロ使うとか
262:デフォルトの名無しさん
09/03/04 13:49:06
char a[]={10, 10, 10};
char b[sizeof(a)];
int c[(sizeof(a)-1+sizeof(int))/sizeof(int)]
263:258
09/03/04 13:53:28
すいません言葉が足りなすぎました。。
int a[]= {1,2,...};
size=sizeof(a)/sizeof(a[0]);
int b[size];
として同じ配列数の新しい配列を宣言しようとしてもできません。
264:デフォルトの名無しさん
09/03/04 13:56:39
C++ なら const int size
Cなら int b[sizeof(a)]
265:デフォルトの名無しさん
09/03/04 13:57:14
>>263
size の型は何か
言語をいえ言語を
C か C++どっちだ
あとCならC89かC99なのか
266:デフォルトの名無しさん
09/03/04 13:57:33
>>263
コンパイラも
267:デフォルトの名無しさん
09/03/04 14:03:12
>>265
C++です。
size の型はintです
>>266
gccです。
268:258
09/03/04 14:08:43
const int size = sizeof(a)/sizeof(a[0]);
int b[size];
として宣言できました。
ありがとうございました。
269:デフォルトの名無しさん
09/03/04 15:03:27
配列の要素に変数が使える規格って無かったっけ
270:デフォルトの名無しさん
09/03/04 15:30:51
>>269
C99だろ
271:デフォルトの名無しさん
09/03/04 17:19:24
連立方程式のを渡したら戻ってくる関数ってありますか?
272:デフォルトの名無しさん
09/03/04 17:20:51
>>271
標準にはない
標準じゃなくていいならある
273:デフォルトの名無しさん
09/03/05 09:53:35
assert()と_ASSERT()ってなにか違いがあるのでしょうか?
274:デフォルトの名無しさん
09/03/05 10:11:11
assertはC/C++標準
結果としてabort()
_ASSERTはVC++独自
_CrtSetReportMode等で動作の調整が可能
275:デフォルトの名無しさん
09/03/05 18:14:15
メンバ関数のポインタの宣言はCxxx::*funcなのに
取得はCxxx::&funcでなく&Cxxx::funcなの?
&がなんで宣言の時の*の位置より移動するの?
276:デフォルトの名無しさん
09/03/05 18:40:47
>>275
発想としては、Cxxx::という修飾が
メンバへのポインタ型では*にかかっていて、
メンバへのポインタを得るときには、メンバ名funcにかかっている
ということのようだ。
277:デフォルトの名無しさん
09/03/05 18:51:32
俺としては逆なんだが
なんでCxxx::&funcなの?
どこのクラスのメンバ関数のアドレスか分からんが
278:デフォルトの名無しさん
09/03/05 20:41:28
大変だー
さっぱりわからん
279:デフォルトの名無しさん
09/03/05 20:43:44
>>278
何が分からないんだかさっぱり分からないぞ
280:デフォルトの名無しさん
09/03/05 20:44:43
>>275
単に文法的な曖昧さを除いた結果そうなっただけ。
class A {
public:
static void (*A::func)();
};
としてしまうと、static メンバ変数の実体定義がこうなってしまう。
void (*A::A::func)();
どっちがどっちの A:: やら分からん。
281:デフォルトの名無しさん
09/03/05 21:16:46
もうクラスのメンバ関数のポインタは無しで
282:デフォルトの名無しさん
09/03/05 22:09:09
9割くらいBoostやTR1のbind(暗黙のmem_fun)と一緒にしか使わない。
283:デフォルトの名無しさん
09/03/05 22:41:19
delegate パターンで使うね
284:デフォルトの名無しさん
09/03/06 01:31:13
じゃあdeleteパターンで
285:276
09/03/06 19:49:52
>>276, >>280
すみません、レス読んでも、それが
取得はCxxx::&funcでなく&Cxxx::funcなの?
の回答になるのか、さっぱり理解できないですが><
あと、&Cxxx::funcは&(Cxxx::func)としては良くないと本に書いてあるんですが
なんで良くないんですか?
286:デフォルトの名無しさん
09/03/06 20:12:15
なんか抽象クラスをインスタンス化できないらしいのですがどうすればいいですか?
派生クラスは無いのですが
その派生クラスの無い抽象クラスが型な引数をとる関数を使いたいのですが初期化?の方法がわかりません
287:デフォルトの名無しさん
09/03/06 20:16:31
>>286
まずは、その抽象クラスへのポインタ型か参照型を引数にしている?
288:デフォルトの名無しさん
09/03/06 20:24:22
>>287
ポインタ型を宣言してます、いろいろ上手くいかなかったのでポインタで宣言、元の抽象型で宣言、アドレスをポインタ型に代入→引数に
としてます、エラーメッセージはメンバが抽象型です、宣言を確認してください、です
289:デフォルトの名無しさん
09/03/06 20:27:48
>>286
派生クラスがない、ではなく、派生クラスは自分で作れということでは?
290:デフォルトの名無しさん
09/03/06 20:29:59
ああ、そうかもしれない
291:デフォルトの名無しさん
09/03/06 20:43:25
"派生クラスの無い抽象クラスが型な引数をとる関数"
これ、抽象クラスのインターフェイスを使って新しいクラスを作れということ
292:デフォルトの名無しさん
09/03/06 20:56:18
覚えておきます、ありがとうございました