ポインタ+ポインタ

[戻る]
RIE 2003/02/21(金) 11:56:40
こんにちは以下のようにポインタ同士を連結して
文字列を作りたいのですが、コンパイルエラーが出てしまいます。
やり方を教えて頂きたいのですが、どなたか宜しくお願いします。

char *a;
char *b;

a = "abc"; 
b = "def"; 

a = a+b;
printf("a = %s\n",a);

επιστημη 2003/02/21(金) 12:12:34
> ポインタ同士を連結して文字列を作りたいのですが

できません。

anony 2003/02/21(金) 12:26:23
下で、string+ポインタの質問もされていましたが、STL等に手を出す以前に、標準関数や基本
的な
部分を理解されていますか? 基本が出来ていないと必ず行き詰まります。

そもそも文字列を連結した際に、元の文字列の長さの合計分(+1)の領域が必要になる(ので、
自分で
用意したりする必要がある)ということを理解していますか?
基本を知らずにstd::string等を使っているなら、上記のようなメモリに関する部分はライブラ
リの中に
隠蔽されてしまっているのでわからないままになってしまいますよ。
#もし、そんなこたぁわかってるよ、という場合は無視して下さい。

RIE 2003/02/21(金) 12:44:44
では、
char a[256];
char b[256];

a = "abc"; 
b = "def"; 

char配列同士を連結させるにはどうすれば良いのでしょうか?
どなたかヒントだけでも宜しくお願いします。

2003/02/21(金) 12:57:36
>char配列同士を連結させるにはどうすれば良いのでしょうか?
C でなんとかするのなら、排列同士を連結する事は面倒なので、中身を連結する場合は

char a[256];
char b[256];
char c[512];

strcpy(a, "abc");
strcpy(b, "def");

strcpy(c, a);
strcat(c, b);

でしょう

tib 2003/02/21(金) 13:03:40
「char配列同士を連結させたものを格納する領域」を用意します。
char a[256];
char b[256];
char c[256];
strcpy( a, "abc" );
strcpy( b, "def" );
sprintf( c, "%s%s", a, b );

何がなんでもaにアペンドしたいなら、

char a[256];
char b[256];
strcpy( a, "abc" );
strcpy( b, "def" );
sprintf( a+strlen(a), "%s", b );

tib 2003/02/21(金) 13:05:25
あー、strcat()ってあったねぇ。sprintf()ばっかりつかってるもんだから忘れてた。

anony 2003/02/21(金) 13:31:03
>char a[256];
>char b[256];
>
>a = "abc"; 
>b = "def"; 

… やはり、基本を勉強した方が…

RIE 2003/02/21(金) 16:54:42
ちょっと調べてみたのですが

char a[256];
char b[256];
char c[256];

_snprintf(c, sizeof(c), a , b);

でやってみようと思うのですが、
何か問題点がありましたらご意見ください。

宜しくお願いします。

2003/02/21(金) 17:00:43
>何か問題点がありましたらご意見ください。

お試しになれば、おかしい事に直(す)ぐ気が付くでしょう
(_snprintf は名前から分るように sprintf の仲間ですから書式が必要でしょう)

επιστημη 2003/02/21(金) 17:01:03
それじゃダメじゃないかしら。
やってみましたか?
マニュアル読みましたか?

PAI 2003/02/21(金) 17:02:32
>_snprintf(c, sizeof(c), a , b);

いや、a と b を連結するんですよね、
かなり違うと思いますけど・・・

_snprintf( c, sizeof(c), "%s%s", a, b);

でしょうか?

επιστημη 2003/02/21(金) 17:04:57
strcatで十分だと思われるのに、なんでわざわざ...

RIE 2003/02/21(金) 17:43:15
ようやく、うまくいきました。
みなさん有難うございました。

RIE 2003/02/21(金) 17:43:44
[[解決]]
すいません。
チェック忘れました。

επιστημη 2003/02/21(金) 18:07:52
どう解決したのかを書いてから〆るのがマナーってもんです。

古いスレッドには追加発言できません。