Строка в C представлена массивом символов, оканчивающимся нулевым символом, '\ 0' со значением 0. Это позволяет всем строковым функциям знать, где находится конец строки. Вот исследование различных способов объявления пустой строки и их значения.
Обычный способ получить пустую строку будет
char* emptyString = "";
Однако emptyString теперь указывает на строковый литерал, который нельзя изменить. Если затем вы хотите объединить пустую строку в цикле, вы должны объявить ее как массив при инициализации.
char buffer[] = "";
Это дает вам массив первого размера. То есть buffer[0]
равно 0. Но вы хотите, чтобы массив соединялся с ним - он должен быть достаточно большим, чтобы вместить строки. Поэтому, если у вас есть строковый буфер определенного размера, вы можете инициализировать его пустым, например:
char buffer[256] = "";
Строка в buffer
теперь является «пустой строкой». buffer[0]
равно 0, а остальные записи в буфере могут быть мусором, но они будут заполнены, как только вы объедините другие строки.
К сожалению, проблема с C в том, что вы никогда не можете иметь "бесконечную" строку, где вы можете безопасно конкатенировать, у вас есть , чтобы знать, что она имеет определенный размер с самого начала. Если ваш массив аргументов также является строками, вы можете найти их длину, используя strlen
. Это дает вам длину строки, без нулевого символа. Как только вы узнаете длину всех ваших подстрок, вы будете знать, как долго будет длиться ваш последний буфер.
int totalSize; // assume this holds the size of your final concatenated string
// Allocate enough memory for the string. the +1 is for the null terminator
char* buffer = malloc(sizeof(char) * (totalSize + 1));
buffer[0] = 0; // The string is now seen as empty.
После этого вы можете свободно объединять строки, используя strcat
.