C・C++・C#
- ポインタの場合のsizeof()
C言語の基礎かもしれませんが、質問させてください。 例えば char a[20] = "computer program"; printf("%d",sizeof(a)); とすると、char型なのでおそらく16と出力されると思うのですが、 char *a = "computer program"; と定義したとき、 printf("%d",sizeof(a)); とすると、どんな値が表示されるのでしょうか?
- CプログラムをUNIXで使いたい
メーカーで解析の仕事をしている者です。 解析用コンピュータのOSは「IRIX」です。またそれとは別に自分のデスクにパソコン(Windows2000)があります。 解析ソフトからの出力ファイルを使って計算するプログラムをC言語で作成して、「Windowsのパソコンで」使用しています。 WindowsのパソコンにCコンパイラは入っていますが、解析用コンピュータには入っていないので仕方なくそうしています。 解析用コンピュータでこのプログラムが使えれば便利なのですが、できないため現状は計算するたびに何度も何度も行ったり来たりしなければならず、とても不便です。 解析用コンピュータにCコンパイラを導入するのは結構なお金がかかるという理由で難しい状況です。 何か良い方法はないでしょうか。教えてください。よろしくお願いします。
- ベストアンサー
- eliteyoshi
- C・C++・C#
- 回答数6
- リスト
アドレス:aa bb cc head → 3 → 1 → 2 → NULL ↓(1) head → 1 → 3 → 2 → NULL ↓(2) head → 1 → 2 → 3 → NULL 図がわかりにくいですが、リスト構造で上記のように昇順で交換を行うソート(逐次決定)処理を行う場合(この場合3つしかないので隣接交換にみえますが逐次のほうです)に、 (1)の処理では…3の要素と1の要素を交換するので、headの次のアドレスは1のアドレス(bb)にし、1の次のアドレスは3のアドレス(aa)にし、3の次のアドレスは2のアドレス(cc) (2)の処理では…3の要素と2の要素を交換するので、1の次のアドレスは2のアドレス(cc)にし、2の次のアドレスは3のアドレス(aa)、3の次のアドレスはNULL となりますよね?? この(1)と(2)の処理を行うプログラムを作成したいのですがどなたかご教授をお願い致します。 またデータが多くなっても対応できるようにしたいです。 前日に下記のほうにも投稿しましたが、勉強不足のためあまり理解できなかったのでもう一度投稿しました。よろしくお願いします。 「http://okwave.jp/kotaeru.php3?q=1876998
- ベストアンサー
- rio_de_car
- C・C++・C#
- 回答数5
- IPアドレスを配列に代入する方法。
パケットモニタリング(tcpdumpみたいなもの)でIPアドレスを取得するプログラムがあるのですが、IPアドレスを配列に代入することが出来ません。 パケットモニタリングのソース void print_ip(struct ip *ip) { printf("| Source IP Address: %15s|\n", inet_ntoa(*(struct in_addr *) &(ip->ip_src))); /* ループ */ 実行画面 | Source IP Address: 12.34.56.78 | | Source IP Address: 34.56.78.09 | ・ ・ というふうにどんどん取得、表示していく このIPアドレス inet_ntoa(*(struct in_addr *) &(ip->ip_src))); を配列に代入していきたいのですが上手くいきません。一応自分でやってみたのですが、 void print_ip(struct ip *ip) { int *pa[2048]; static int i = 1; printf("| Source IP Address: %15s|\n", inet_ntoa(*(struct in_addr *) &(ip->ip_src))); i++; pa[i] = (int *)&(ip->ip_src); printf("送信先[%d]%15s\n", i, inet_ntoa(*(struct in_addr *) pa[i])); if (i == 10) { for (i = 1; i < 10; i++) { printf("送信先[%d]%15s\n", i, inet_ntoa(*(struct in_addr *) pa[i])); }} } という風にaddres[1]から順にどんどんIPアドレスを格納しようとしたんですがaddres[1]からaddres[10]まで表示するときに全部addres[10]に代入されているIPアドレスが表示されてしまいます。 おそらく配列にIPアドレスが上手く格納できてないんだと思うのですが。C言語初心者なので誰かご教授していただけないでしょうか? 宜しくお願いします。 OSはLinuxです。
- ベストアンサー
- zunzunzunzunzun
- C・C++・C#
- 回答数6
- ヘッダーファイルがインクルードされない(?)
ダイアログ上のボタンをクリックすると指定されたテキストファイルをオープンし、 ファイルの内容をスペースで区切って格納するプログラムを http://oshiete1.goo.ne.jp/kotaeru.php3?q=474452 こちらを少し変えて作ったのですが、 コンパイル・デバッグを行なうと 'std' : 識別子がクラス名でも名前空間名でもありません。 'vector' : 定義されていない識別子です。 'ofstream' : 定義されていない識別子です。 と言ったようなエラーになってしまいます。 必要なヘッダーファイルはインクルードされているはずなのですが・・・。 この原因は何故でしょうか? /**********プログラムソース**********/ #include <iostream> #include <fstream> #include <string> #include <vector> #include <utility> #include "stdafx.h" #include "SCHEDULE.h" #include "SCHEDULEDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // ~中略~ void CSCHEDULEDlg::OnReq() { typedef std::pair<std::string,std::string> item; std::vector<item> participation; std::ofstream file(dataFile.txt); std::string line; while ( std::getline(file,line) ) { std::string::size_type pos = line.find(' '); participation.push_back(item(line.substr(0,pos), line.substr(pos+1))); } for ( int i = 0; i < participation.size(); ++ i) { std::cout << "result = " << participation[j] << "]\n"; } }
- ベストアンサー
- noname#17462
- C・C++・C#
- 回答数9
- DOSでメモ帳を開いても改行されない・・
プログラムを作ってDOS窓でメモ帳を開けるようにしたのですが、改行ができません。 プログラムからメモ帳を開いた場合¥nは検知してくれないのでしょうか? どのようにプログラムを組めばいいでしょうか?
- ベストアンサー
- bitter140307
- C・C++・C#
- 回答数2
- int main()の・・・
初心者です。 ものすごく基本的な質問なんですが、 int main() のint型は、どういった意味なんでしょうか? char main() はだめなんでしょうか? それと ()内意味はなんでしょうか? よろしくお願いします。
- SendRequestでヘッダが受信されない
WindowsXp VC++6.0 winInetを利用して、Https クライアントプログラムを作っています。 サーバーのログから、SendRequestで、データはPostされているのですが、ヘッダは受信されていないようでした。 何か原因、おわかりの方は参考になるホームページ及びご指導お願いします。 CHttpConnection *pHttp; CHttpFile *pHttpFile; CInternetSession objSession(NULL, INTERNET_OPEN_TYPE_DIRECT); cURL = "https://hogehoge//hw/exrpc.cgi"; AfxParseURL(cURL, dwServiceType, strServer, strObject, nPort); pHttp = objSession.GetHttpConnection(strServer,INTERNET_FLAG_SECURE, nPort, m_sUser, m_sPasswd); pHttpFile = pHttp->OpenRequest(HTTP_VERB_POST, strObject, NULL, 1, NULL, NULL, INTERNET_FLAG_SECURE); cHeader = "Content-Type: application/x-www-form-urlencoded\r\nContent-Length: xxx\r\nCookie: sid=yyyy"; sData.Format("xml=zzzzzzzzzzzzzzzz"); pHttpFile->SendRequest(cHeader, (LPVOID)((LPCTSTR)sData), sData.GetLength()); pHttpFile->QueryInfoStatusCode(dwRc); //dwRcには200が帰ってきています。
- 線形リストのソートについて
データ構造を線形リストとして、情報を管理するプログラムのソートについてです。 以下のプログラムはデータを入れ替えて、その後アドレスを入れ替えるようにしてソートを行っていますが、そうではなく線形リストなのでつなぎ替えるようにしてソートを行うプログラムを作成したいのですがわからないのでご教授をお願い致します。ソートは逐次決定で行ってます。 構造体の宣言として、nameとageとnextは氏名と年齢と次のポインタを指します。NAME_SORT、AGE_SORTはマクロです。 struct sortlist(struct PERSON *head) { int menu; struct PERSON person; /* 情報 */ struct PERSON move_person; /* 比較していく情報 */ struct PERSON work; /* 情報の一時的保存 */ struct PERSON temp; /* 作業用 */ struct PERSON temp_address; /* アドレス作業用 */ printf("ソート機能を選択:"); printf("%d:氏名\n",NAME_SORT); printf("%d:年齢\n",AGE_SORT); /* 交換処理 */ for(person = head; person -> next != NULL; person -> person -> next) { work = person; /* 交換データの探索 */ for(move_person = person -> next; move_person != NULL; move_person -> next) { switch(menu) { case NAME_SORT: if(strcmp(work -> name, move_person -> name) > 0) { work = move_person; } break; case NAME_SORT: if(work -> age > move_person -> age) { work = move_person; } break; default: printf("機能以外が選択されました"); return head; } if(work != person) { /* 情報の交換 */ temp = *person; *person = *work; *work = temp; /* アドレスの交換 */; temp_address = employee -> next; person -> next = work -> next; work -> next = temp_address; } } } } printf(“ソート完了”); }
- ベストアンサー
- rio_de_car
- C・C++・C#
- 回答数7
- セクタダンプするプログラム
セクタダンプするプログラムを作りたいのですが、 参考になる書籍を探しております。 出来ればDOSでなく、Windowsで動作するものが良いです。
- C++の実行
Borland C++ Compiler 5.5をインストールして、 コンパイルはできましたが、 exeファイルを実行できません。 どうしたらよいでしょうか?
- ベストアンサー
- uchibomber
- C・C++・C#
- 回答数5
- メモリの再確保について
テキストファイルを読込む関数を作成しています。 まず最初にある程度の領域をmalloc()関数で確保し、 読み込む過程で領域が不足すると再割り当てを 行うようにしたいのですが、 エラーが出力されます。 ソース(エラー処理は省略)は次の通りです。 textdata = (char *) malloc (size * sizeof (char)); for (i = 0; !feof (stream); ) { character = fgetc (stream); textdata[i] = character; i++; if ((i % size) == 0) { temp = (char *) malloc (2 * size * sizeof (char)); memcpy (temp, textdata, size * sizeof (char)); free (textdata); textdata = temp; } } 出力されるエラーは次の通りです。 *** glibc detected *** ./lsm: malloc(): memory corruption (fast): 0x09a34198 *** (省略) アボートしました どなたか解決方法を御指導願います。
- ベストアンサー
- noname#18852
- C・C++・C#
- 回答数2
- Borland C++ Compiler 5.5の使用制限
Borland C++ Compiler 5.5での勉強とコンパイルを予定しています。 理由はフリーで使えるからです。 ところでこのコンパイラについて質問があります。 このコンパイラでコンパイルした場合の使用制限というのはあるのでしょうか? 1.シェアウェアなどの商用利用は可能か? 2.ソースコードの公開義務などはないか? 3.その他注意点があれば教えてください。 4.Borland C++ Compiler 5.5と一緒にDLしておくと 便利な物がありましたら教えてください。 DLしようとしたらメール登録が必要だとありましたが、 それよりも手前のページで仕様制限に関するページが 見つけられなかったので質問させていただきました。
- ベストアンサー
- tukikageran
- C・C++・C#
- 回答数3
- 配列データをExcelファイルとして出力させるにはどうすればいいですか
あけまして、おめでとうございます。新年早々で申し訳ございませんが、本当に急いでいるので、誰か、教えてくださいませんか。 今、以下のような組合せ関連の問題を作成し、その結果(配列)を今は単にトップ上に表示させているだけですが、トップに表示させた内容をExcelファイルとして出力させるには、どうすればいいですか? できれは、ソースもお願いしたいですが、よろしくお願いします。 問題に関するソース: /* 結果表示*/ for( ci = 0; ci < (int)prevStepC.size(); ci++ ) { printf( "%3d) %s = (C:%3d, U:%.2f)\n", ci + 1, prevStepC[ci]->name.c_str(), prevStepC[ci]->value, (float)prevStepU[ci]/100 ); } result[i] += comparedNumber; memory[i] += memoryUsed; printf( " Compared number: %d\n", comparedNumber ); printf( " Memory used: %d Byte(s)\n\n", ((int) prevStepU.size() * sizeof(int) + (int)prevStepC.size() * sizeof(cost)) * 2 ); } printf( "-------------------------------------------------------------------------------\n\n" ); release_c( &curStepC ); curStepU.clear(); release_c( &prevStepC ); prevStepU.clear(); release_c( &C ); U.clear(); } printf( " Step\tCompare(avg)\tMemory(avg)\n" ); printf( " -------------------------------------------\n" ); for( int i = 0; i < N; i++ ) { printf( " #%d\t\t%d\t\t%d Byte(s)\n", i + 1, (long)(result[i] / TEST_NUMBER), (long)(memory[i] / TEST_NUMBER) ); } cout << endl << endl; cout << "Press any key to continue"; getch(); return ( 0 ); }
- ダイアログ中の下線付きテキストをクリックすると、ブラウザやメーラーを起動するには?
環境は、MSVC6.0又は、MSVC++.net2003です。 よく、アプリケーションのバージョン情報などで、色つき、下線付きのテキストで、HPなどにリンクが張られていて、クリックすると、ブラウザが起動するのがあります。 もう少し詳しく説明すると、テキストにカーソルを当てると、カーソルの種類が変わって、クリックすると、ブラウザが起動して、作者のHPを開いたり、「mailto:hogehoge」の場合、あて先が作者のメールアドレスとなりデフォルトのメーラーが起動するアプリケーションがあります。 そのやり方を知っている方、いらっしゃいましたらご教授お願いします。