strcat и malloc
3581 просмотра
2 ответа
В настоящее время мне нужно strcat () 2 строки вместе. Подвох в том, что я должен сделать это 3 раза. (Всего 6 объединений). Процедура повторяется 3 раза с использованием циклов:
- Malloc строка
- Используя цикл for, вызовите strcat 2 раза
- Освободить строку
Проблема в том, что даже после того, как я освобождаю строку и повторно выполняю malloc, strcat, похоже, продолжает объединять предыдущую строку.
Например:
Ожидаемый результат от AA BB CC DD EE FF
- строка strcat 1: AABB
- строка strcat 2: CCDD
- строка strcat 3: EEFF
Фактический выход:
- строка strcat 1: AABB
- строка strcat 2: AABBCCDD
- строка strcat 3: AABBCCDDEEFF
Кто-нибудь знает, почему он это делает?
void sendInitialHand(card * deck) {
char * stringToSend;
playerNode * curNode;
curNode = housePlayers.head;
for (int i=0; i<housePlayers.playerCount; i++) {
stringToSend = malloc(sizeof(char)*6);
for (int j=0; j<52; j++) {
if (deck[j].inPlay == curNode->playerFD) {
strcat(stringToSend, deck[j].identifier);
}
}
for (int j=0; j<52; j++) {
if (deck[j].inPlay == 10) {
strcat(stringToSend, deck[j].identifier);
}
}
printf("[NETWORK] Send %d the following: %s\n", curNode->playerFD, stringToSend);
//send(curNode->playerFD, stringToSend, 6, 0);
free(stringToSend);
curNode = curNode->next;
}
}
Автор: user1305850
Источник
Размещён: 12.11.2019 09:43
Ответы (2)
1 плюс
После ptr=malloc(…)
, до strcat()
, инициализируйте пространство с *ptr = '\0';
. Возвращаемая память malloc()
обычно не обнуляется.
0 плюса
Изучите свою циклическую структуру с помощью операторов printf, вероятно, вы не освобождаете то, что вы думаете, когда вы думаете, что вы есть. Отредактирую ответ на основе кода ..
Вы только re-malloc, который просто говорит, эй, я собираюсь написать здесь .., что вы уже сказали. Попробуйте освободить / повторно инициализировать переменную
Автор: RyanS Размещён: 03.04.2012 07:56Вопросы из категории :
- c Как вы форматируете unsigned long long int, используя printf?
- c What are the barriers to understanding pointers and what can be done to overcome them?
- c Как реализовать продолжения?
- c Как вы передаете функцию в качестве параметра в C?
- c Как получить список каталогов в C?
- c В чем разница между #include <filename> и #include "filename"?
- string В чем разница между строкой и строкой в ??C #?
- string Почему в Ruby нет реального StringBuffer или StringIO?
- string Преобразовать строку в перечисление в C #
- string Преобразование списка <Integer> в список <String>
- string Самый эффективный способ объединения строк?
- string Экранирование строк HTML с помощью jQuery
- malloc В каких случаях я использую malloc и / или new?
- malloc Массивы переменного размера и calloc в C
- malloc Я использую результат malloc?
- malloc Что ДЕЙСТВИТЕЛЬНО происходит, когда вы не освобождаетесь после malloc?
- malloc Является ли malloc поточно-ориентированным?
- malloc Установка переменной в NULL после освобождения