Я обнаружил это неожиданное поведение при написании кода для Arduino и смог повторить то же самое в MSVC15:
struct IDCount
{
uint16_t count;
char ID[20];
};
void test06b()
{
IDCount item;
char str[] = "0411010103, 8";
char str1[20];
// writing to struct member char array
int res1 = sscanf(str, "%[^,], %d", item.ID, &item.count);
printf("[%d] id: [%s]\tcount: [%d]\n", res1, item.ID, &item.count);
// writing to a char array
int res2 = sscanf(str, "%[^,], %d", str1, &item.count);
printf("[%d] id: [%s]\tcount: [%d]\n", res2, str1, &item.count);
}
Результаты:
[2] id: [] count: [8]
[2] id: [0411010103] count: [8]
Я потратил немало времени на проверку спецификатора формата, прежде чем сузился до проблемы с массивом struct char. Почему не работает массив char в структуре? Есть идеи?
Заранее спасибо.
Обновление
Переход с uint16_t на int работает.