違いは、本質的には、空の2つの配列を1つのメモリ空間にマージしようとしていることです。
まず、Cでは、文字列を\0
で終了する必要があります。これは、Javaでは公開されていない、または表示されていないものです。また、基本的に2つの未定義の文字列を使用しています(値が設定されていないため)。
#include <stdio.h>
#include <string.h>
char target[256];
const char source_a[] = "Hello";
const char source_b[] = "World!";
int void(main)
{
target[0] = '\0'; // this essentially empties the string as we set the first entry to be the end. Depending on your language version of C, you might as well write "char target[256] = {'\0'};" above.
strcat(target, source_a); // append the first string/char array
strcat(target, " "); // append a const string literal
strcat(target, source_b); // append the second string
printf("%s\n", target);
return 0;
}
重要:何の長さのチェックを行っ、およびJava以外はありませんようstrcat()
を使用すると、UNSAVEすることができ、これらの「文字列は」固定長(変数を定義するときに設定するもの)を持っています。長さが指定されていないが、初期化時に文字列をコピーすると、その長さが使用されます(例:char test[] = "Hello!";
は7文字分長くなります(\0
が終了するため)。
文字列に対してJavaのようなアプローチをしたい場合は、C++とstd::string
クラスを使用します。これは、Javaの文字列とよく似ています。
cでは、null(0x0)文字で文字列を明示的に終了する必要があります。 – StuartLC
申し訳ありませんが、 "const charとcharを連結する"とは何ですか?それはこの文脈では意味をなさないと思われる。また、何かをstrcattingする前に、あなたは必ずtcp配列を初期化していますか? –
私はconst charの内容を編集できないので、空の配列の別のcharと組み合わせています。少なくともそれは計画だった。 – Max