• ベストアンサー

char*を初期化したいのですが

Cの標準関数だけで char*を初期化したいのですが どの様にすればいいのでしょうか? char* a = "aaaa"; char* b = "bbbb"; strcat( a, b );//"aaaabbbb"? とし使いまた後で aにまた値を入れ直したいので 初期化して再利用したいのですが どのようにすればいいのでしょうか? ポインタとかもうっすら(ほとんどわかりません) よろしくお願いいたします

  • gotyan
  • お礼率91% (172/188)

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

  • ベストアンサー
  • orion6619
  • ベストアンサー率41% (5/12)
回答No.2

> char* a = "aaaa"; > char* b = "bbbb"; > strcat( a, b );//"aaaabbbb"? この上のコードは間違っていますよ。 変数a、bに入っているのはあくまでも文字列の"ポインタ"です。 従いまして、strcat( a, b );とすると、aがさしているメモリは5バイトしかないのでメモリを破壊してしまいます。 static char sza[] = "aaaa"; static char szb[] = "bbbb"; char szBuffer[256]; char* a = szBuffer; strcpy (a, sza); strcat (a, szb); としないとだめです。 またポインタ変数はNULLで初期化可能です。

gotyan
質問者

お礼

ありがとうございます 元々おかしかったのですね........ 勉強不足で恥ずかしいです 参考にさせていただきがんばります ありがとうございました

その他の回答 (1)

回答No.1

char*型の変数=NULL; で初期化できませんでしたっけ。 ポインタ変数の初期化にはNULLを使用するような記憶があります。 間違いだったらすみません。

gotyan
質問者

お礼

ありがとうございます NULLですね 一度やったのですが 上の方が言われるように 間違っていたので だめだったようです............ またやってみます

関連するQ&A

  • C言語のmemcpy関数について質問します。

    C言語のmemcpy関数について質問します。 以下のプログラムを作成して実行したのですが期待した動作が行えません。 どなたか原因が分かる方がいましたらアドバイスいただければと思います。 (期待する動作) STR_Bに"aaaa"を格納したい (現在の動作) STR_Bに"aaaabbbb"が格納される。 (printfで"aaaabbbb"が表示される) (以下プログラムです) char *STR_A = "aaaabbbb"; char *STR_B; /* 初期化 */ memset(&STR_B,0x00,sizeof(STR_B)); /* 文字列コピー */ memcpy(&STR_B,&STR_A,4); /* コピーした文字の表示 */ printf("STR_B = %s\n",STR_B);

  • (char*)について

    ソースを見ている際に、 以下のようなソースがありました。 構造体Aのメンバ char x char y[5+1] の2つがあり、 ある関数のなかで構造体Aのポインタを引数で渡しており、 それをマクロに対して、 (1)マクロB("あいうえお",(char*)A->x, sizeof(A->x,) ) (2)マクロB("かきくけこ",A->y sizeof(A->y) ) という風にわたしていました。 そこで質問なのですが、(1)に対してだけ第2引数に、(char*)が ついていますが、これはどういった意味があるのでしょうか?

  • char型とstring型について

    char型とstring型について質問があります。 言語はC++です。 以下の関数があったとします。 void test(string a, string b string c){ 処理 } この関数を下記のように利用した場合について質問があります。 a.引数に直接文字列を挿入したケース test("aaa","bbb","ccc") b.変数に文字列を設定し、変数を引数にしたケース string a="aaa" string b="bbb" string c="ccc" test(a,b,c) (1)はコンパイルエラーになり、(2)は成功しました。 同じ様に見えるのですが、何が違うのでしょうか? また、関数の引数の型をchar*にした場合、(1)(2)のケースでコンパイルが通りました。char*型だと何が違うのでしょうか?

  • エクセルについての質問。

    エクセルの関数に関して質問があります。 |10001|AAAA|10002|BBBB| |10002|BBBB|10004|DDDD| |10003|CCCC|10004|DDDD| |10004|DDDD|10001|AAAA| |10005|EEEE|10005|EEEE| ちょっと分かりにくいですが 一番上の行ですと、 列A=10001 列B=AAAA 列C=10002 列D=BBBB と考えて下さい。 質問です。 --------------------------- 列Cの数値を列Aから検索して 同じのがあれば列Bの数値を列Dに表示する。 --------------------------- この関数を教えて頂けませんでしょうか? 宜しくお願い致します。

  • Excel関数 文字分割

    A列               関数の結果求めたい値 AAAA BBBB(半角スペース区切)     AAAA AAAA BBBB(全角スペース区切)    AAAA AAAA/BBBB(半角/区切)        AAAA AAAA/BBBB (全角/区切)       AAAA =LEFT(A1,FIND(" ",SUBSTITUTE(A1," "," "))-1) =LEFT(A1,FIND("/",SUBSTITUTE(A1,"/","/"))-1) Excelの関数で一回の関数で上記二つの関数を使用して 区切文字複数を考慮して文字分割したいのですが、 どのように実施すればよいかご教授ねがえますでしょうか? IF文を使うのかもしれないとは思いいろいろと試したのですが うまく出来ない為質問させて頂いたおります。

  • charの操作について

    お世話になります、フジと申します。 今回皆様にお聞きしたいことはchar型変数の操作についてなのですが、次のプログラムのようにchar型に代入した整数を16進数用に変換させ、最後に同じchar型の変数に代入したいと考えています。 int a,b,c; char data = 48; //dataに10進数48を代入 c = (int)data; //ここでcは48になる a = c/16;          //16進数用に変換 b = c%16; c = 10*a + b;        //ここでcは30になる このint型変数c(30)をchar型変数dataに代入するにはどうしたらいいでしょうか? char buf[5]; sprintf(buf,"%d",c); にすればchar型の配列に代入することは出来ますが、これだとcの値30がbuf[0]=3,buf[1]=0となってしまい、目的の操作が達成できません。 よい方法をしっている方がいましたら、宜しくお願い致します。

  • char型のポインタ配列に変数の値の代入できる?

    c言語でchar型のポインタ配列に変数の値を代入できるのでしょうか? 例えば int A[10]={1,2,3,4,5,6,7,8,9,10}; char *C[10]; のCに配列Aの中のデータを文字列として入れたいのです。 C[0]="A[0]"としてもA[0]という文字列が代入されてしまうだけなので… よろしくお願いします。

  • char *name1[4] とchar name2[][4] の違いについて

    C言語のことで質問があります。 char *name1[4]は char *name1[4] = {"abcdefghi","jkl","l","mn"}; と宣言でき,ポインタを4つ確保した形となりました。 char name2[][4]は char name2[][4] = {"abc","def","ghi","jkl","mno","pqr","stu","vwx"}; と4文字以内の文字列を初期化した数だけ確保した形となりました。 この結果からchar *name1[4]の意味は,char name2[][4]ではなくchar name2[4][]に近いと思いました。 しかし,char name2[4][]ではポインタを4つ確保した事にはならないみたいでコンパイルが通りません。 *name1[4]では4つのポインタを確保できるのに~と思ってしまいます。 ポインタと配列は別物と考えるべきなのでしょうか? 訳の分からない質問かもしれませんが, 何卒ご指導いただくようよろしくお願いします。

  • charポインタへの文字列による動的確保

    char *c=new char("abcd"); のようにして、cに"abcd"のポインタを代入しようとしたのですが、 error C2440: '初期化中' : 'const char [5]' から 'char' に変換できません。 と出てきてうまくいきません。 どの様にすれば、メモリ確保と同字に文字列で初期化できるのでしょうか?

  • [Excel]重複データの一方のセルが持つ値を一方の空白セルに反映させたい

    A列にある7000件ほどのデータの中から重複データのみを抽出し、 重複データの一方がB列に持つ値を、もう一方のデータのB列の空白セルに反映させたいのですが、方法はありますでしょうか? 「COUNTIF」を使って重複データの抽出はできますが、一方が持つデータをもう一方の空白に反映させることができません。 手作業では期限に間に合わない可能性がみえて焦っております。 恐縮ですがご教授いただけますでしょうか。 (例) [処理前] A列:B列:C列 1111:AAAA:aaaa 2222:BBBB:bbbb 3333:CCCC:cccc 1111:    :dddd 2222:    :eeee [処理後] A列:B列 1111:AAAA:aaaa 1111:AAAA:dddd 2222:BBBB:bbbb 2222:BBBB:eeee

専門家に質問してみよう