Здравствуйте.Обычно использовал sscanf в простых целях sscanf(string,"dd",params[0],params[1]).Но настал день,когда мне нужно от него больше.
В базе данных есть поле типа varchar.В нем будут хранится строки,отделенные запятой("aaa,bbb,c,gdgggg..."). Мне нужно это дело считать и записать в трехмерный массив.Я пробовал делать так:
Код
PHP код:
#define MAX_FRAC 10
#define MAX_RANGS 10
new fRangsNames[MAX_FRAC][MAX_RANGS][25];
new connectionHandle;
//...вызов OnFracLoad() из OnGameModeInit();
//паблик загрузки
@OnFracLoad();
@OnFracLoad()
{
new r, f;
cache_get_data(r, f,connectionHandle);
for(new i; i < r; i++)
{
new string[MAX_RANGS*24+9+1];
cache_get_field_content(i, "fRangsNames", string), sscanf(string, "p<,>a<s[25]>["#MAX_RANGS"]",fRangsNames[i]);
for(new j;j<MAX_RANGS;j++) printf("FRAC:%d %d - %s",i+1,j+1,fRangsNames[i][j]);
}
return 1;
}
И как вы могли догадаться, у меня ничего не получилось.
И да, в базе данных во второй фракции была такая запись:
PHP код:
a,a,a,a,a,a,a,a,a,a
логи
[14:54:36] FRAC:1 1 -
[14:54:36] FRAC:1 2 -
[14:54:36] FRAC:1 3 -
[14:54:36] FRAC:1 4 -
[14:54:36] FRAC:1 5 -
[14:54:36] FRAC:1 6 -
[14:54:36] FRAC:1 7 -
[14:54:36] FRAC:1 8 -
[14:54:36] FRAC:1 9 -
[14:54:36] FRAC:1 10 -
[14:54:36] FRAC:2 1 -
[14:54:36] FRAC:2 2 -
[14:54:36] FRAC:2 3 -
[14:54:36] FRAC:2 4 -
[14:54:36] FRAC:2 5 -
[14:54:36] FRAC:2 6 -
[14:54:36] FRAC:2 7 -
[14:54:36] FRAC:2 8 -
[14:54:36] FRAC:2 9 -
[14:54:36] FRAC:2 10 -
Но если в sscanf поставить массив без указания его размерности,
PHP код:
sscanf(string, "p<,>a<s>["#MAX_RANGS"]",fRangsNames[i]);
то будет следующее:
Логи
[14:56:48] FRAC:1 1 -
[14:56:48] FRAC:1 2 -
[14:56:48] FRAC:1 3 -
[14:56:48] FRAC:1 4 -
[14:56:48] FRAC:1 5 -
[14:56:48] FRAC:1 6 -
[14:56:48] FRAC:1 7 -
[14:56:48] FRAC:1 8 -
[14:56:48] FRAC:1 9 -
[14:56:48] FRAC:1 10 -
[14:56:48] sscanf warning: Strings without a length are deprecated, please add a destination size.
[14:56:48] FRAC:2 1 - a
[14:56:48] FRAC:2 2 - a
[14:56:48] FRAC:2 3 - a
[14:56:48] FRAC:2 4 -
[14:56:48] FRAC:2 5 -
[14:56:48] FRAC:2 6 -
[14:56:48] FRAC:2 7 -
[14:56:48] FRAC:2 8 -
[14:56:48] FRAC:2 9 -
[14:56:48] FRAC:2 10 -
Как видно, первые 3 вывел ,а также вывел ошибку о том, что мы не указали размерность строки.
Дальше ,как я не пытался что-то сделать, ничего не получалось.
Буду благодарен за помощь.Возможно плохо прочитал офф.документацию по sscanf v2.8.1
UPDATE: заменил sscanf(string, "p<,>a<s>["#MAX_RANGS"]",fRangsNames[i]);
на sscanf(string, "p<,>a<s>[250]",fRangsNames[i]); //250 - это MAX_RANGS * 24 + 9 + 1
Получилось следующее:
лог
[16:23:59] FRAC:1 1 -
[16:23:59] FRAC:1 2 -
[16:23:59] FRAC:1 3 -
[16:23:59] FRAC:1 4 -
[16:23:59] FRAC:1 5 -
[16:23:59] FRAC:1 6 -
[16:23:59] FRAC:1 7 -
[16:23:59] FRAC:1 8 -
[16:23:59] FRAC:1 9 -
[16:23:59] FRAC:1 10 -
[16:23:59] sscanf warning: Strings without a length are deprecated, please add a destination size.
[16:23:59] FRAC:2 1 - aaaaaaaaaaaaaaaaaaaaaaa
[16:23:59] FRAC:2 2 - aaaaaaaaaaaaaaaaaaaaaaa
[16:23:59] FRAC:2 3 - aaaaaaaaaaaaaaaaaaaaaaa
[16:23:59] FRAC:2 4 - aaaaaaaaaaaaaaaaaaaaaaa
[16:23:59] FRAC:2 5 - aaaaaaaaaaaaaaaaaaaaaaa
[16:23:59] FRAC:2 6 - aaaaaaaaaaaaaaaaaaaaaaa
[16:23:59] FRAC:2 7 - aaaaaaaaaaaaaaaaaaaaaaa
[16:23:59] FRAC:2 8 - aaaaaaaaaaaaaaaaaaaaaaa
[16:23:59] FRAC:2 9 - aaaaaaaaaaaaaaaaaaaaaaa
[16:23:59] FRAC:2 10 - aaaaaaaaaaaaaaaaaaaaaaa
Но выдает warning (sscanf warning: Strings without a length are deprecated, please add a destination size.).Я считаю, что это не правильно, т.к каждый раз будет выводит этот warning,а это не есть хорошо.