0

私はまだここにいるのは初めてですが、なぜ以下のことができないと信じていたのか疑問に思いました。

「Hello there!\n」の値に foobar を割り当てようとしています。それができないか、それを理解するのに苦労しています。

編集:以下が機能しない理由を探していることを明確にする必要があります。これは、代わりになる多くのソリューションの1つではありません。

編集:「そのようにcで文字列変数を連結することはできません」という答えを取りました。おそらく、以下の方法を許可するにはパーサーを書くのが難しすぎたためです。私は新しすぎて別のことを知ることができず、新しすぎてそれほど心配することもできません。誰かが引用で正式な理由を見つけた場合は、投稿してください.

#include <stdio.h>

int main()
{

char *foo = "Hello";
char *bar = " there!\n";
const char *foobar = (*foo) *bar;

printf("%s", foobar);

return 0;

}

これは問題ではないようです。

4

4 に答える 4

11

そのようにcで文字列変数を連結することはできません。

そのメモリに両方の文字列をコピーするためのメモリ空間が必要です。

char foobar[100]文字列のサイズが定義されたサイズよりも大きくできないことが既にわかっている場合のように、メモリ空間は静的バッファである可能性があります。または、次の例に示すように、文字列の制限サイズがわからない場合、メモリは動的バッファである可能性があります

#include <stdio.h>
#include <string.h>

int main()
{

   char *foo = "Hello";
   char *bar = " there!\n";
   char *foobar = malloc(strlen(foo) + strlen(bar) + 1);
   strcpy(foobar,foo);
   strcat(foobar,bar);
   printf("%s", foobar);

   return 0;

}

メモリを割り当てる場合は、プログラムでメモリが役に立たなくなったときにメモリmalloc()を解放することを忘れないでくださいfoobar

free(foobar);
于 2013-01-12T20:30:18.490 に答える
3

C では、文字列をこのように連結することはできません。あなたがしようとしていることを模倣する1つの可能な方法は、プリプロセッサを利用することです:

#include <stdio.h>
#define FOO "foo"
#define BAR "bar"

int main()
{
char *foo = FOO;
char *bar = BAR;
const char *foobar = FOO BAR;

printf("%s", foobar);

return 0;
}
于 2013-01-12T20:34:46.467 に答える
2

「編集された」質問に答える:

C言語自体は文字列を連結する方法を知らないため、機能しません。strcatまたはその他の機能を使用することになっています。さらに、コンパイラは結果の文字列を格納するために "foo" と "bar" のストレージを使用できないため、文字列をメモリ内のどこに置くべきかわかりません。

もちろん、C では、*fooコード内の の意味は文字'H'であり、 に*bar変わります' '。これ(*foo) *bar('H') ' '、C ではまったく有用な意味を持ちません。

于 2013-01-12T20:43:26.347 に答える
1

あなたのコードはおそらく問題なくコンパイルされますが、そこにはいくつかの間違いがある可能性があります。

最初の 2 つの char* (または文字列) 宣言は正当です。3つ目はそれほどでもない。(*bar) を *foo としてキャストしていますが、これはデータ型ではなく変数であり、文字列連結を行う代わりに、foobar をそのキャストされた foo の値に設定しています。

C は、演算子による文字列連結を行いません。代わりに、特定のライブラリを使用して文字列を連結したり、独自の関数を作成したりする必要があります。文字列の場合、string.hがあります

この特定のケースでは、strcatがあります。2 つの文字列を取り、それら 2 つの文字列を連結した新しい文字列を返します。

したがって、あなたの例では:

char *foo = "Hello";
char *bar = " there!\n";
const char *foobar = malloc((strlen(foo)+strlen(bar))*sizeof(char));
foobar = strcat(foo,bar);

このようなもの。

お役に立てれば。

于 2013-01-12T20:45:24.457 に答える