Разница здесь в том, что вы, по сути, работаете с двумя пустыми массивами, пытаясь объединить их в одну область памяти (не уверен, имеет ли это для вас смысл).
Прежде всего, в CВы должны завершить строки с \0
.Это то, что не выставлено или не видно в Java.Кроме того, вы, по сути, использовали две неопределенные строки (поскольку значение не установлено).
#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;
}
Важно: Использование strcat()
может быть небезопасным, так как проверка длины не выполняется, и кроме Java эти "строки"иметь фиксированную длину (ту, которую вы устанавливаете при определении переменных).Если длина не указана, но вы копируете строку при инициализации, эта длина берется (например, char test[] = "Hello!";
будет иметь длину 7 символов (из-за завершения \0
)).
Если вы хотитебольше Java-подобного подхода к строкам, используйте C ++ и класс std::string
, который работает намного больше похож на строки Java.