Вы должны использовать трюк макросов с двойным расширением. Или просто есть
#define MAX_LEN 16
#define MAX_LEN_S "16"
char val[MAX_LEN+1];
sscanf(buf, "%"MAX_LEN_S"s", val);
и синхронизируйте его. (Это немного беспокоит, но пока определения находятся рядом друг с другом, вы, вероятно, будете помнить.)
На самом деле, в данном конкретном случае, strncpy
не достаточно?
strncpy(val, buf, MAX_LEN);
val[MAX_LEN] = '\0';
Если бы это было printf
, это было бы проще:
sprintf(buf, "%.*s", MAX_LEN, val);