2

2 つの const char* を 3 番目に結合するにはどうすればよいですか?

私はこのコードでこれをやろうとしています:

const char* pName = "Foo"
printf("\nMy name is %s.\n\n\n",pName);
const char* nName;
int num_chars = asprintf(&nName, "%s%s", "Somebody known as ", pName);

しかし、私はこのエラーが発生します:

'asprintf': identifier not found

次のコードで stdio.h をインクルードします。

#include <stdio.h>
4

4 に答える 4

9

シンプルで、C++を使用するだけです。

const char* pName = "Foo"
std::string name("Somebody known as ");
name += pName;

const char* nName = name.c_str();
于 2012-07-18T21:51:51.197 に答える
7

asprintfGNU拡張です。代わりに、、snprintfまたは を使用できstrncatますが、メモリ管理を自分で処理する必要がありasprintfます。結果を割り当てます。

を使用することをお勧めしますstd:string。これにより、コードがはるかに簡単になります。

于 2012-07-18T21:52:48.753 に答える
2

sprintf(snprintf)またはstrcat(strncat)。sprintf。

sprintf(nName, "%s%s", "Somebody known as ", pName);

strcat。

strcpy(nName, "Somebody known as ");
strcat(nName, pName);
于 2012-07-18T21:52:21.963 に答える
1

この質問にC++のタグを付けたことに加えて、Cを使用していると仮定します。C ++が必要な場合は、Luchianの回答を参照してください。

コードにはいくつかのエラーがあります-より大きなエラーは、によって指す文字列にメモリを割り当てなかったことですpName。2番目のエラーは、関数nName内の予約済みメモリ位置のアドレスではなく、変数のアドレスを取得していることですasprintf。3番目のエラーは、asprintf関数が標準のC関数ではないが、GNU拡張機能であり、コンパイラーで使用できない可能性があることです(どちらであるかはわかりませんでした):http://linux.die.net/man/3/asprintf

次のようなものを使用する必要があります。

#include <stdio.h>
const char* pName = "Foo"
printf("\nMy name is %s.\n\n\n",pName);
char nName[30];
int num_chars = sprintf(nName, "%s%s", "Somebody known as ", pName);

編集:asprintf関数について詳しく読みました。ポインタのアドレスをに渡す必要がありますが、asprintfではなく、に渡す必要があります。メモリの場所として、ポインタが指すメモリの場所は、に十分なメモリを割り当てた後に変更されます。const char *char*asprintf

于 2012-07-18T22:00:04.253 に答える