avoid sprintf() through C++ features and libfmt

This commit is contained in:
Axel Kohlmeyer
2023-01-07 15:47:46 -05:00
parent 1556460b8f
commit d572d8f051
3 changed files with 10 additions and 17 deletions

View File

@ -266,11 +266,8 @@ void Variable::set(int narg, char **arg)
num[nvar] = utils::inumeric(FLERR,arg[2],false,lmp);
data[nvar] = new char*[1];
data[nvar][0] = nullptr;
if (narg == 4) {
char digits[12];
sprintf(digits,"%d",num[nvar]);
pad[nvar] = strlen(digits);
} else pad[nvar] = 0;
if (narg == 4) pad[nvar] = std::to_string(num[nvar]).size();
else pad[nvar] = 0;
}
if (num[nvar] < universe->nworlds)
@ -955,13 +952,9 @@ char *Variable::retrieve(const char *name)
style[ivar] == SCALARFILE) {
str = data[ivar][which[ivar]];
} else if (style[ivar] == LOOP || style[ivar] == ULOOP) {
char result[16];
if (pad[ivar] == 0) sprintf(result,"%d",which[ivar]+1);
else {
char padstr[16];
sprintf(padstr,"%%0%dd",pad[ivar]);
sprintf(result,padstr,which[ivar]+1);
}
std::string result;
if (pad[ivar] == 0) result = std::to_string(which[ivar]+1);
else result = fmt::format("{:0>{}d}",which[ivar]+1, pad[ivar]);
delete[] data[ivar][0];
str = data[ivar][0] = utils::strdup(result);
} else if (style[ivar] == EQUAL) {