wchar_t* pwstInput = in[0]->getAs<types::String>()->get()[0];
int iNumberPercent = 0;
- for (int i = 0 ; i < wcslen(pwstInput) ; i++)
+ int iNumberPercentPercent = 0;
+ for (int i = 0; i < wcslen(pwstInput); i++)
{
if (pwstInput[i] == L'%')
{
if (pwstInput[i + 1] == L'%')
{
//it is a %%, not a %_
- iNumberPercent--;
+ iNumberPercentPercent++;
//force incremantation to bypass the second % of %%
i++;
}
}
//Input values must be less or equal than excepted
- if ((in.size() - 1) > iNumberPercent)
+ if ((in.size() - 1) > iNumberPercent - iNumberPercentPercent)
{
Scierror(999, _("%s: Wrong number of input arguments: at most %d expected.\n"), "msprintf", iNumberPercent);
return types::Function::Error;
}
}
- if (iNumberCols != iNumberPercent)
+ if (iNumberCols != iNumberPercent - iNumberPercentPercent)
{
Scierror(999, _("%s: Wrong number of input arguments: data doesn't fit with format.\n"), "msprintf");
return types::Function::Error;
//fill ArgumentPosition structure
- pArgs = new ArgumentPosition[iNumberPercent];
+ pArgs = new ArgumentPosition[iNumberPercent - iNumberPercentPercent];
int idx = 0;
for (int i = 1 ; i < in.size() ; i++)
{
pToken[iToken].pwstToken = new wchar_t[iEnd - iStart + 1];
wcsncpy(pToken[iToken].pwstToken, pwstFirstOutput + iStart, iEnd - iStart);
pToken[iToken].pwstToken[iEnd - iStart] = L'\0';
+ pToken[iToken].outputType = InternalType::ScilabNull;
//identify destination type
//format : %[flags][width][.precision][length]specifier