All this on C89, not on C99.
I have a constant.
#define MAX_NAME_LEN 256
I want to use it as the maximum field width in fscanf, sort of like.
fscanf(input, "%256s", name);
But I want to use MAX_NAME_LEN instead of literal 256 for a good style. I tried everything
fscanf(input, "%MAX_NAME_LENs", name);
char* max_name_len_str = malloc(16 * sizeof *max_name_len_str);
sprintf(max_name_len_str, "%d", MAX_NAME_LEN);
fscanf(input, "%" max_name_len_str "s", name);
free(max_name_len_str);
fscanf(input, "%*s", MAX_NAME_LEN, name);
fscanf(input, "%%ds", MAX_NAME_LEN, name);
without success.
char* nameFormat = malloc(16 * sizeof *nameFormat);
sprintf(nameFormat, "%s%ds", "%", MAX_NAME_LEN);
fscanf(input, nameFormat, name);
free(nameFormat);
really works, but awkward as everyone is coming out. Is there a more elegant solution?
source
share