У меня есть программа, которая передает символьный указатель, и функция, которой он передается, заполняет его строками. Однако я заметил, что данные были усечены. После исследования с использованием gdb кажется, что есть разница в размерах указателей.
int main(void) {
unsigned char *test_char;
test_char = (unsigned char *)malloc(sizeof(unsigned char) * 6);
memset(test_char, 0x00, sizeof(unsigned char) * 6);
functionToPopulate(test_char);
}
void functionToPopulate(unsigned char *test_char) {
snprintf(test_char, sizeof(test_char), "%u%s%u", 20, ":", 30);
}
В этой ситуации я использовал gdb перед memset и напечатал значение test_char. Это говорит (6). Во время и после snprintf я снова использовал gdb для вывода значения test_char. Это говорит (4). Однако по возвращении значение снова говорит (6). Однако данные уже были усечены. Вместо «20:30» оно становится «20:».