- 1 名前:ぬ ◆NUNUK382Dk mailto:sage [2007/12/27(木) 20:32:47 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.45【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1197090562/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 282 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 09:06:01 ]
- >一文字ずつ前にコピー
馬鹿がいる。 >char tmp[strlen(a) + 1]; c99使いがいる。 # つーか、一時領域要らないだろw
- 283 名前:281 mailto:sage [2008/01/05(土) 09:10:17 ]
- >>282
確かに一時領域要らなかった。 >>278 ってことで、訂正。これでc89でも大丈夫。 void func(char * a, char const * b) { if (a == NULL || b == NULL || a[0] == '\0' || b[0] == '\0') return; char const * p = strstr(a, b); if (p == NULL) return; strcpy(p, p + strlen(b)); }
- 284 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 09:13:58 ]
- >>283
いや、未だc89じゃ通らないし。つーか、char const * pじゃなくてchar * pだろよ。
- 285 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 09:28:25 ]
- >>283
strcpyでコピー範囲が重なってるから動作が未定義になるぞ。
- 286 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 09:35:26 ]
- さらに指定の文字列は複数回出現する可能性も有るから・・・
さらに言えば指定文字列を取り除いた後に前後の文字列がくっついて取り除くべき指定文字列になる可能性も。 ex. aabbcからabを取り除くとabcになって再度abが出現。
- 287 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 10:05:44 ]
- ありがとうstrlen使う発想がなかったから助かりました
実はURLからime.nu/を消したかっただけなんでこんな感じでまとめたみた if(NULL!=strstr(url,"ime.nu/")){ char *buf; buf=strstr(url,"ime.nu/"); url[strlen(url)-strlen(buf)]='\0'; buf+=strlen("ime.nu/"); strcat(url,buf); }
- 288 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 10:27:58 ]
- strcatも未定義動作になるから止めれ。
- 289 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 11:18:35 ]
- >>276
ポインタpも関数から脱出した瞬間ナイナイされるので安全。
- 290 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 11:21:28 ]
- strcpy()で、前方への移動ができない実装ってあるんかいな。
未定義には違いないけど。
- 291 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 14:10:38 ]
- >>273
>p = &local; //NG これもOKだよ よく考えろ、pもローカル変数だ
- 292 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 14:32:16 ]
- >>291
ほう? void TestFunc(int* p) { int x = 10; p = &x; } int main(int argc, char* argv[]) { int a; TestFunc(&a); printf("%d\n", a); return 0; }
- 293 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 14:44:20 ]
- >>292
そういう話をしてるんじゃないと思うが。
- 294 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 14:45:20 ]
- 何が「ほう?」なんだか。
- 295 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 14:52:06 ]
- >>292
君が何を言いたいのか分からない 要するに、そのコードがどうした? 何か問題でも?
- 296 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 14:59:12 ]
- >>292
void TestFunc(int* p) { int x = 10; p = &x; } int main(int argc, char* argv[]) { int a = 5; TestFunc(&a); printf("%d\n", a); return 0; } 出力結果 5
- 297 名前:292 mailto:sage [2008/01/05(土) 15:00:49 ]
- ごめん、俺が悪かった。物凄く勘違いしてたらしい。いじめないでくれ。
- 298 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 15:10:58 ]
- ローカル変数のポインタをリターンするときに注意が必要なんだっけ?
- 299 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 15:14:17 ]
- あれ?戻った先で使おうと思っても残ってる保証がないんぢゃ? > 298
- 300 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 15:15:17 ]
- そうだね。
int* f() { int a = 10; return &a; // NG } 特に構造体とか大きいものを返したいときに、 コストを避けようとしてやってしまう人もいるかも。 素直に値で返すか、引数に格納先のポインタを貰うべし。
- 301 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 15:21:00 ]
- そんな時のための動的確保ですよ > 300
- 302 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 15:24:48 ]
- >>300
動的確保するならauto_ptrですな。 std::auto_ptr<int> f() { return std::auto_ptr<int>( new int(10) ); }
- 303 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 15:25:07 ]
- ヒープ領域に確保されるからdeleteで明示的に削除しない限り開放されないってやつか
ただしdelete忘れるとメモリリークが起こるから注意(´・ω・)
- 304 名前:デフォルトの名無しさん [2008/01/05(土) 18:52:20 ]
- 初歩的な質問ですいません。ポインタに関して質問です。
二次元配列の動的確保なのですが、 TCHAR hoge[5][260]; のような時に5の部分だけ動的に確保して260の方は固定したいのですが、 TCHAR *hoge[260]; hoge = (TCHAR *)malloc(sizeof(TCHAR)*260*num); のようにすると、"'char *'から'char *[260]'に変換することはできません"とコンパイルエラー吐きます。 TCHAR **hoge; で最初から動的確保を2度行う方法は分かるのですが、片方を固定した場合どのようにすべきでしょうか。
- 305 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:54:06 ]
- TCHAR (*hoge)[260];
- 306 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:54:47 ]
- hoge = (TCHAR (*)[260])malloc(sizeof(TCHAR)*260*num);
- 307 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:54:58 ]
- sizeof(TCHAR)*260
を sizeof(hoge) にするとどうなる?
- 308 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 18:55:45 ]
- あるいは
hoge = (TCHAR (*)[260])malloc(sizeof(*hoge)*num);
- 309 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 19:02:05 ]
- typedef すると分かりやすいよ。
typedef TCHAR Path[MAX_PATH]; Path *hoge; hoge = (Path *)malloc(sizeof (Path) * num);
- 310 名前:304 mailto:sage [2008/01/05(土) 19:23:37 ]
- 即レス感謝です。
>>307 そうすると、後者の場合は戻り値が4になりました。 何故かsizeof(TCHAR)だと1でした。何故2じゃないのだろう・・・。Unicodeじゃないからかな・・・?? >>305-306 のように間接参照演算子を括弧でくくると上手くコンパイルも通り、 for(i = 0 ; i < max ; i++) hoge[i] = "test"; と動作も確認出来ました。 >>309 のようにtypedefのやり方もググって見つけたのですが、 直接的にどうやれば通るか知りたかったもので。。 やはり、typedefの方が分かりやすいですね。
- 311 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 19:30:57 ]
- 型宣言の * は間接参照演算子とは別物。
- 312 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 19:35:03 ]
- >>310
TCHARはマクロでワイド文字(wchar_t)とマルチバイト文字(char)を切り替える VCならプロパティからUnicode文字セットを使用するようにすればワイド文字になる 後"test";は_T("test");もしくはTEXT("test");って書くように。そうすれば切替の対象になるから。
- 313 名前:デフォルトの名無しさん mailto:sage [2008/01/05(土) 21:29:06 ]
- 構造体にすると見慣れた形になる。
typedef struct { TCHAR str[260]; } Path; Path* hoge = (Path*)malloc(sizeof(Path) * num); 煩雑かな。
- 314 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:18:19 ]
- なんて言うかポインタの配列と多次元配列へのポインタを勘違いしている様な希ガス
int *p[10]だとint型のポインタが10個あるポインタの配列 int a[10][10]とかの多次元配列へのポインタなら int (*p)[10]
- 315 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:55:57 ]
- C言語で何か分かりやすいプログラムはないでしょうか。
- 316 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:56:34 ]
- helloworld
- 317 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 00:59:19 ]
- int main(){
return 0; } 多分これが一番分かりやすい
- 318 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 01:48:10 ]
- C++Builder 6でコンパイルした後
printfでテキスト文を表示したいんですけど どうすればいいんでしょうか。
- 319 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 01:49:48 ]
- エスパーが質問に答えるスレ
pc11.2ch.net/test/read.cgi/tech/1187922645/
- 320 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 02:15:16 ]
- 実行すれば良いんじゃない。
- 321 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 02:28:04 ]
- 日本語をコマンドプロンプトや「メモ帳」で表示させたいです。
できれば背景が白い所に分かりやすく表示させたい。 マジレスきぼんぬ。
- 322 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 02:34:03 ]
- コマンドプロンプトの配色を「白地に黒文字」に設定
- 323 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 02:48:13 ]
-
#include <stdlib.h> system( ); で、適当に コマンドの命令だが、 color F0 とか #define color(x) printf("\033[%dm", x + 30); MS使用だったかも知れないが。 system("notepad.exe puni.cpp"); 詳しくは調べて
- 324 名前:304 mailto:sage [2008/01/06(日) 02:57:35 ]
- >>314
それを観て何となく納得出来ました。 キャストが初めて観るので、もうちょっと弄ってみます。 レスくれた皆さんありがとうございました。
- 325 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 05:36:09 ]
- 動的メモリの解放がいまいちよく判りません。
以下の(A)で生成した snow は、 (B)で問題なく解放されているのでしょうか? void procMain() { Snow ***snow = NULL; int i, j; // 生成 ←(A) snow = new Snow**[10]; for ( i = 0; i < 10; i++ ) { snow[i] = new Snow*[5]; for ( j = 0; j < 5; j++ ) { snow[i][j] = new Snow(); } } // 解放 ←(B) for ( i = 0; i < 10; i++ ) { for ( j = 0; j < 5; j++ ) { delete snow[i][j]; } delete snow[i]; } delete snow; } 下2つの delete が delete[] の様な気もしますが、 判る方がいましたらよろしくお願いします。
- 326 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 05:49:38 ]
- >>321
ファイルに出力した後にそのファイルを開けばいい。 fp=fopen("test.txt","r"); fprintf(fp,"hoge"); fclose(fp); system("test.txt");
- 327 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 06:32:15 ]
- >>325
new [] 使ってるから delete [] だろうね。 こういうのはややこしくなるから、 フラットな配列にして添え字は掛け算するのがシンプルでいい。 Snow *snow = new Snow[10*5]; for (int i = 0; i < 10; i++ ) for (int j = 0; j < 5; j++ ) snow[i*5+j].xxx(); delete [] snow;
- 328 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 06:40:43 ]
- >>321
>>318でエディションがPersonal以外ならOutputDebugString。イベントタブに出力される
- 329 名前:325 mailto:sage [2008/01/06(日) 08:55:02 ]
- >>327
レスありがとうございます。問題が解決しそうです。 どちらの delete でもコンパイルが通っちゃうから自信が持てない・・・
- 330 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 11:33:30 ]
- >>315
全然関係ないが、自分が一番最初に見たC++のサンプルはこれだ。 #include <iostream> int main(int argc, char *argv) { std::cout << "Hello World !" << std::endl; return 0; } ついでに、一番最初に聞いたクラスの説明は 猫も人もみな哺乳類なのです だ。
- 331 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 11:48:57 ]
- >>330
mainの引数もまともに書かないとは、悪いサンプルだな。
- 332 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 12:42:49 ]
- 俺はこれだった・・・
static char _main[] = { 0x81, 0x21, ...., 0x21 } PDPほにゃらら専用とかかいてあった
- 333 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 14:01:44 ]
- 最近Win32APIを使ったソフトを作り始め、色々とサンプルを見て回ってるのですが
多くがひとつの.cppファイルにまとまってるようなコードや、グローバル変数が多いソースで、 それを元にコードを打ち始めたらひとつのファイルに何千行というコードが入り、設定情報 をグローバル変数で共有するような気持ち悪いコードになってしまいました。 Win32を用いたコードでうまくOOPの概念を取り入れて、出来るだけすっきりとしたコードを書きたいのですが、 なにかアドバイスがあればご教授願います。
- 334 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 14:08:52 ]
- APIを直接呼ぶんじゃなくて、APIを包み込むクラスかしてから使う。たとえばファイル関係のクラスを作って外からAPIを見えなくする。
- 335 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 14:19:46 ]
- >>333
Win32API 直叩きじゃなくて、MFCや.NET Framework使ったほうが良いよ。
- 336 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 14:21:16 ]
- MFCや.NET Frameworkみたいなのを作りたいんだろ。
- 337 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 14:48:05 ]
- SDLとかwx使おう是
- 338 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 15:25:17 ]
- VCLも愛して
- 339 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 16:29:28 ]
- 暇だしVCLをC++に移植するか
- 340 名前:333 mailto:sage [2008/01/06(日) 16:30:59 ]
- 皆さん ご回答ありがとうございます。
どうやらMFCってのがうまくAPIを纏めているようなのでそれを使いたいと思います・・・
- 341 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 16:37:27 ]
- >>339
それ欲しい。是非に
- 342 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 16:58:12 ]
- >>339
文字列クラスには是非sprintfメソッドを
- 343 名前:デフォルトの名無しさん [2008/01/06(日) 19:06:34 ]
- C++のSTLであるvector型に関する質問です。
AAA, BBB, CCCという3つのvector型があって、 それらの要素AAA[index], BBB[index], CCC[index] (indexは全て共通の整数)を一括削除したいのですが、 下記のような冗長な構文になってしまいます。 消したい対象DDD, EEE, FFFが増えていくと、プログラムが非常に長くなってしまうのですが、 イテレーターaaa, bbb, cccを極力使用せずにコンパクトに記述する方法は無いでしょうか・ vector<double>::iterator aaa; aaa = AAA.begin(); vector<int>::iterator bbb; bbb = BBB.begin(); vector<string>::iterator ccc; ccc=CCC.begin(); for(int a=0;a<index;a++) { aaa++; bbb++; ccc++; } AAA.erase(aaa); BBB.erase(bbb); CCC.erase(ccc);
- 344 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 19:21:25 ]
- >>343
いや、少なくともfor文はいらなくね?advance使えば? というより、こういうのは思いっきりtemplateの出番だと思うんだが。
- 345 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 19:24:03 ]
- >>343
そもそもデータ構造を struct Hoge { double d; int n; string s; }; vector<Hoge> hoge; とできないの? ちなみにvector<>::iteratorはランダムアクセスできるので AAA.erase(AAA.begin()+index)でOK
- 346 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 19:29:51 ]
- >>344
>>345 ありがとうございます。 既にクラスの階層構造を何段か組んでいるので、これ以上階層化するのは避けたいと思いまして。 最後の1行の場合、indexがint型だからコンパイルエラーにならないでしょうか?
- 347 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 19:35:34 ]
- >>346
RamdomAccessIteratorなら加算がオーバーロードされてるからおk
- 348 名前:343 mailto:sage [2008/01/06(日) 19:35:53 ]
- まずはこの方法でためしてみます。
AAA.erase(AAA.begin()+index)
- 349 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 19:36:13 ]
- >>347
重ね重ねありがとうございますm(_ _)m
- 350 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 19:52:25 ]
- #include <stdio.h>
から始まる基本関数で 何か表示する物はあるんでしょうか。
- 351 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:02:22 ]
- Random Access Iteratorだから
AAA.erase( AAA.begin() + index ); BBB.erase( BBB.begin() + index ); CCC.erase( CCC.begin() + index ); でいいんじゃね?
- 352 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:04:09 ]
- printfとか簡単な関数でもいいんですが。
コンパイラの設定でブリーダーができません。
- 353 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:05:49 ]
- 質問はコミュニケーション言語日本でお願いします。
- 354 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:08:28 ]
- これからテンプレートの勉強を始めようと思っているんですが
テンプレート:クラスみたいなもん STL:テンプレートのあつまり みたいな認識ってまちがっていますか?
- 355 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:10:15 ]
- >>354
間違ってる
- 356 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:35:34 ]
- 関数テンプレートの使いどころというか選択についてです
気にしなくて良いレベルなのだと思いますが 引数にaとbを取り、大きな方を返す関数テンプレートがあったとします。 この場合、大きい値を返す関数のint用のものfloat用のもの・・・・といった具合にたくさんの関数を用意するのとでは どちらが良いのでしょうか? ここで関数テンプレートを使うとなんというかもったいないというか処理が無駄に大きく膨らんでいる気がしてならないです 今すぐに想像はできないのですが、ここでいう大小を比べる程度のものでなく、もっと大きなものならば関数テンプレートが有効だとは思います
- 357 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:36:29 ]
- 大事なところがorz
つまり処理数が多いものならば関数テンプレートを利用した方が良い、などの明確だったりしないまでの決まりのようなものはあるのでしょうか?
- 358 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:38:53 ]
- >>356
何で? ぜんぜんもったいなくないと思うけど。 呼び出されてる型のものだけが具体化されるから 効率的だと思うし、実際std::maxテンプレートはあるじゃない。
- 359 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 20:40:57 ]
- >>356
>int用のものfloat用のもの・・・・といった具合にたくさんの関数を用意する これが面倒じゃないと思うならがんばれば?
- 360 名前:356 mailto:sage [2008/01/06(日) 20:41:07 ]
- >>358
ありがとうございます そうですよねorzもったいないと感じている自分がおかしくてならないです 積極的に使っていこうとおもいます
- 361 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 21:03:26 ]
- だから、std::max()を使えってば。
- 362 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 21:06:46 ]
- >>361
356は例えばで言ってるだけだろ
- 363 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 21:14:07 ]
- >>360
おかしくないです。出てくるコードの大きさを見積もることは必要なことです。
- 364 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 21:17:24 ]
- >>356
>int用のものfloat用のもの・・・・といった具合にたくさんの関数を用意する 保守性を考えるとこの考え方はは良くない。 バグがあったら全部直さなきゃいけないし、直し忘れが出てくる可能性がある。 ステップ数が少ない場合でも、バグが出るときは出る。 こういう場合を想定してテンプレートが出てきたわけだし。
- 365 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 22:00:30 ]
- templateを使うとexeがバカでかくなるって言うアホがいるんだよな
俺も会社でよく言われるんだわ
- 366 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 22:04:31 ]
- そういやテンプレートを使う機会が無い
- 367 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 22:07:18 ]
- 仮にばかでかくなったとして、どのぐらいのサイズなら問題だと感じるんだろう……
- 368 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 22:13:00 ]
- 環境によってさまざまだろうね。
組み込み環境なら結構致命的になりかねん気もするけど、それならC++にするメリット少ないし。 一般的なソフトウェアならCDやDVDに入りきらなくなったらとかじゃないのかな?
- 369 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 22:13:48 ]
- 仮にテンプレート使わなかったとしても、
似たような物作るわけだしな。
- 370 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 22:34:36 ]
- >>365
昔のコンパイラは知らないけど、信じがたい。 具現化されるのは自分で呼び出してるものだけだから。 インライン化とか別の理由で大きいんでない? それともテンプレート使わなくても、もともとバカでかく なるプログラムかもしれん。
- 371 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 22:43:46 ]
- >>370
大きなクラスを丸ごとテンプレートにしたんじゃないか?
- 372 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 22:44:17 ]
- オブジェクトファイルのサイズだけ比較すればずっと増えるんじゃね?計ったことないけど
- 373 名前:デフォルトの名無しさん [2008/01/06(日) 23:01:42 ]
- VC++2008express editionでコンソールアプリケーションを作れるか実験してみた結果
できませんでした。 どうしたもんでしょう。
- 374 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 23:04:36 ]
- それだけじゃ、何が起こったのかサッパリ
- 375 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 23:07:35 ]
- C言語の質問なんだが。
持たせたファイルポインタからファイルネームを得たいんでファイルポインタからメンバーを見てみたら tmpfnameってのがあったけど、このtmpfnameってそのファイルの名前と考えておk? あと、これって環境依存?
- 376 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 23:12:35 ]
- 環境依存
- 377 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 23:12:59 ]
- FILE構造体の中身は処理系依存
- 378 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 23:15:56 ]
- >>376-377
ありがとうございました。 別の方法で管理することにします。
- 379 名前:デフォルトの名無しさん [2008/01/06(日) 23:36:51 ]
- C言語の質問です
main関数で用意したdouble *xを別の関数の中でmallocを使ってサイズを決めることと数値の代入を行いたいのですが上手く出来ません どのようにすればいいでしょうか 以下は自分で作ったものの該当部分だけを抜き出し簡略化したものです #include<stdio.h> #include<stdlib.h> void f(double *); void main(void) { double *x; f(x); free(x); } void f(double *a) { a=(double *)malloc(sizeof(double)*3); if(a==NULL){ printf("メモリ確保失敗\n"); exit(1); } a[1]=2.0; }
- 380 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 23:40:52 ]
- ポインタを関数に渡しているといってもポインタという値を渡してるだけ。
そのポインタを関数の中で書き換えてもmainじゃ影響されないから引数消して返り値使うとか、 ポインタのポインタを引数でとるかのどっちか。
- 381 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 23:41:45 ]
- >>379
そりゃ、上手くいかんわ。 void f(double **); void main(void) { double *x; f(&x); free(x); } void f(double **a) { *a=(double *)malloc(sizeof(double)*3); if(*a==NULL){ printf("メモリ確保失敗\n"); exit(1); } *a[1]=2.0; } 全く試してないけど、これでどうよ?
- 382 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 00:01:18 ]
- >>381
俺も全く試してないけど >*a[1]=2.0; なんか嫌な臭いがする。 優先順位、これでよかったっけ?
|

|