C++ メモリの動的な変更方法

このQ&Aのポイント
  • VC++2008 Express版でメモリの確保を自動的に調節するプログラムを作成する方法について教えてください。
  • 以下のプログラムを作成しましたが、メモリの確保量を動的に変更する方法を知りたいです。
  • C++のプログラムで、メモリの確保量を自動的に調節する方法についてご教授ください。
回答を見る
  • ベストアンサー

c++ メモリの確保を動的に変更する

VC++2008 Express版で以下のプログラム(第1引数をクリップボードにセット)を作成しましたがメモリの確保量を自動的に調節するようにしたいのですが、どうしたらよろしいですか #include <stdio.h> #include <windows.h> void main(int argc,char *argv[]) { OpenClipboard(NULL); int iStrLen = 8;//★ここを調整したい★ HGLOBAL hMem = ::GlobalAlloc(GMEM_FIXED, iStrLen); LPTSTR pMem = (LPTSTR)hMem; ::lstrcpy(pMem, (LPCTSTR)argv[1]); ::EmptyClipboard(); ::SetClipboardData(CF_TEXT, hMem); ::CloseClipboard(); }

noname#97178
noname#97178

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

int iStrLen = lstrlen((LPCTSTR)argv[1]) + 1; または #include <string.h> して int iStrLen = strlen(argv[1]) + 1; かな? lstrlenとか使うならmain関数も int _tmain(int argc, _TCHAR* argv[]) がいいのでしょうが

noname#97178
質問者

お礼

#include <string.h> を追加して int iStrLen = strlen(argv[1]) + 1; を修正しましたが実行するとエラーになりました。 しかし int iStrLen = strlen(argv[1]); でうまくいきました。ありがとうございました。

関連するQ&A

  • メモリ違反でソフトが強制終了してしまいます。

    コンパイルして実行すると ttp://kei100.jp/diary/images/20050612_0.png このようなメッセージが表示されてしまいます。 #include <windows.h> #include <stdio.h> #include <string.h> void main(void) { HANDLE hFile; HGLOBAL hg = GlobalAlloc(GMEM_FIXED, 1000); char* test = "test"; LPTSTR aaa="spacetestspace"; char* bbb = NULL; char ccc[5]; aaa=(char*)GlobalLock(hg); bbb = strstr(aaa, test); strncpy(ccc, bbb, strlen(test)); printf("ccc = %s \n", ccc); GlobalUnlock(hg); GlobalFree(hg); GlobalFree(aaa); } どなたか解決方法を知っている方、回答よろしくお願いします。

  • C言語でコマンドラインの引数について。

    コマンドラインで引数をわたす基本的なプログラムは main(int argc,char *argv[]){....] ですよね。 今回実行時に、 >実行ファイル名 123 + 233 といれたら、123+233を計算してくれるプログラムを作ろうとしています。 その場合、main(int argc,int *argv[]){} としたら、argv[1]に123が入って、argv[2]に+が入って、argv[3]に233が、入るというわけではないんでしょうか? とりあえず、確認で #include<stdio.h> main(int argc,int *argv[]) { printf("%d\n%d\n",argv[1],argv[3]); } としてみたんですが、実行結果は、とても長い数字がでてきてきました。 なにがいけないのか教えてください。 お願いします。 あとWindows MEでVC++6を使ってます。

  • GlobalAlloc関数について

    char *Buf; Buf = GlobalAlloc(GMEM_FIXED, 1000); このように指定するとエラーが出てしまうのですが、 BufにはHGLOBALではなくcharを使いたいのですが、無理なのでしょうか? 環境はBorlandです。 よろしくお願いします

  • c++ TCHARで文字化け

    TCHARはUNICODEが扱えるときいたので早速つかってみた。以下は引数を表示するプログラムである。 Visual C++ Express Editionを使った。 #include <stdio.h> #include <tchar.h> int _tmain(int argc, _TCHAR* argv[]) { int i=0; while(i<argc){ _tprintf(_T("%s\r\n"),argv[i++]); } return 0; } しかし上記プログラムに日本語の引数をわたすと文字化けするではないか。なでしょうか?

  • クリップボードへのコピー

    あるHPのコードを参考に文字をクリップボードへ コピーするコードを書いてみましたが、エラーが できます。なにかおかしいかご指摘いただけないでしょうか? HGLOBAL hText; wchar_t *pText; hText = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, 4); pText = (wchar_t*)GlobalLock(hText); lstrcpy(pText, L"abc"); GlobalUnlock(hText); OpenClipboard(NULL); EmptyClipboard(); SetClipboardData(CF_TEXT, hText);//ここでヒープが壊れていると起こられます。 CloseClipboard(); もっとも単純なテストコードです。 いろいろとチェックを手抜きしてますが、とりあえずOKとします。

  • C言語のシェルプログラミングの課題が分かりません。

    C言語のシェルプログラミングを作れという課題で、以下のように作ったんですが、実行して何度かコマンドを入力した後、exitによって一発で終わらせることができません。どのように書き換えればいいか教えて下さい。 また、他にも書き換えた方がよいと思えるところがあったら是非教えて下さいm(_ _)m #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/wait.h> #include <sys/types.h> #include MAX_ARGS 10 #include MAX_LEN 100 extern char **environ; void child(int argc, char *argv[MAX_ARGS]); int main(void){ int argc, n = 0; int status; char input[MAX_LEN], *argv[MAX_ARGS], *cp; const char *delim = "\t\n"; while (1){ ++n; printf("$ "); fflush(stdout); if(fgets(input, sizeof(input), stdin) == NULL){ break; } cp = input; for(argc = 0; argc < MAX_ARGS; argc++){ if((argv[argc] = strtok(cp, delim)) == NULL) break; cp = NULL; } if(strcmp(argv[0], "exit") == 0){ exit(0); } pid_t pid = fork(); if(pid == -1){ perror("fork"); exit(1); }else if(pid == 0){ child(argc, argv); }else{ wait(&status); } } return 0; } void child(int argc, char *argv[MAX_ARGS]{ execvp(argv[0], argv); }

  • 二行目の*の意味を教えてください。

    #include <stdio.h> int main(int argc, char *argv[]) { int i; for ( i = 0; i < argc; i++ ){ printf("argv[%d]=%s\n", i, argv[i]); } return argc; }  以上プログラムで、二行目の*の意味を教えてくさい。  6行目のargvには*が付いていません!?  よろしくお願いします。

  • strcmp,strcpy

    a.outの後で入力した文字列を比較するコードでの質問です。 #include<stdio.h> #include<string.h> int mystrcmp(???){ ??? } int main(int argc,char*argv[]){ printf(???); exit(0); } ???の所をどう書けばいいか分かりません、よろしくお願いします。

  • main( )

    次の様なプログラムを作りました。 Dosプロンプトを開き、コンパイルで出来た、exeファイルのアドレスを渡しました。 例えば、2と3を引数として渡す時、 2 スペースを押す、 3 enter  の順に行うと、エラーになります。 どの様に、引数を渡すのか操作方法を教えてください。 お願いします。 #include<stdlib.h> #include<stdio.h> int main(int argc, char *argv[]) {    if(argc!=3){     printf("2つの数を指定してください。");     exit(1);    }     printf("%f",atoi(argv[1])+atoi(argv[2]));    return 0; }

  • C言語で分からないところがあるのですが・・・

    すみません。C言語で分からないところがあったので来ました。 ユーザから数字を任意の数だけ受け取って、その数字とその和を表示するプログラムです。atoiなる関数、そしてコマンドライン引数というのを使って考えてみた結果を下に書きましたので、どなたか修正してください。お願いします。 実行結果(のイメージ図) 20 39 4 sum 20 39 4 63 途中までのソースコードです。 #include <stdio.h> #include <stdlib.h> #include <math.h> int main(int argc,char *argv[]) { int sum; int n,i; printf("How many numbers INPUT?: "); scanf("%d", &n); for(i = 0; i <= n; i++){ atoi(argv[i]); } sum = printf("%d",sum); return 0; }

専門家に質問してみよう