文字の配列を 1 つの文字列に変換したい。
例:
char foo[2] = {'5', '0'};
-->char* foo = "50";
Cでこれを行うための最良の方法は何ですか? この問題は、コマンドライン入力から部分文字列を抽出しようとしている大きな問題に起因しています。たとえば、プログラムがこのようargv[1][0]
にargv[1][1]
実行された場合...
$ ./foo 123456789
「12」をchar*
変数に割り当てることができました。
何かのようなもの:
char* foo_as_str = malloc(3);
memset(foo_as_str, 0, 3);
strncpy(foo_as_str, argv[1], 2);
char[]
複数のリテラル文字列でa を初期化できないため、例を書き直します。
char foo[3] = { '5', '0', '\0' }; // now foo is the string "50";
が文字列を保持する場合、配列に少なくとも3 つの要素が必要であることに注意してください。追加の要素は、C 文字列で必要なヌル終了文字用です。上記は次と同等です。foo
"50"
char foo[3] = "50";
ただし、 から最初の 2 文字を抽出するためにこれは必要ありません。次のargv[1]
ように使用できますstrncpy
。
char foo[3];
foo[0] = '\0';
if ((argc > 1) && (strlen(argv[1]) >= 2)
{
// this copies the first 2 chars from argv[1] into foo
strncpy(foo, argv[1], 2);
foo[2] = '\0';
}
Check out the man page of strcat. Mind overwriting constant strings.
If you want just put chars together to form a string, let you do that as well:
char foo[3];
foo[0] = '1';
foo[1] = '2';
foo[2] = 0;
To make a string you will need to add a null terminating byte after the two characters. This means that the memory address following them needs to be under your control so that you can write to it without messing up anyone else. In this case, to do that you will need to allocate some additional memory for the string:
int length = 2; // # characters
char* buffer = malloc(length + 1); // +1 byte for null terminator
memcpy(buffer, foo, length); // copy digits to buffer
buffer[length] = 0; // add null terminating byte
printf("%s", buffer); // see the result
使用できますstrcat
が、宛先バッファーが結果の文字列を収容するのに十分な大きさであることを確認する必要があります。
を使ってみてくださいstrcat()
。
char *foo[2] = {"5", "0"}; /* not the change from foo[x] to *foo[x] */
size_t size = sizeof(foo) / sizeof(foo[0]);
char *buf = calloc(sizeof(char), size + 1);
if(buf) {
int i;
for(i = 0; i < size; ++i)
strcat(buf, foo[i]);
printf("buf = [%s]\n", buf);
} else {
/* NO momeory. handling error. */
}
出力:
buf = [50]