Sscanf в C ++ (чтение значений и назначение одновременно) - PullRequest
0 голосов
/ 13 сентября 2011

Могу ли я сделать что-то подобное в C ++?

//int i,Data[];
//malloc Data[];

$sscanf(line,"Data[%d]=0x%d",i,Data[i]);

Данные [] - это массив int, и я пытаюсь читать случайные индексы в соответствии со значением «i», которое я прочитал за один раз.

Ответы [ 2 ]

4 голосов
/ 13 сентября 2011

Вы можете сделать это следующим образом:

int index, value;
sscanf(line, "Data[%d]=%d", &index, &value);
// Check if index is within bounds of the array here
Data[index] = value;

Вам нужен '&', потому что sscanf принимает указатели в качестве аргументов.

0 голосов
/ 13 сентября 2011

Почему бы не попробовать это самостоятельно? Не забывайте, что вам нужно передавать указатели на ваши значения, т.е.

sscanf(line, "Data[%d]=0x%d", &i, &Data[i]);

Независимо от того, работает ли это (и это для записи, это не так), он делает намного более читабельным / безопасным кодом выполнение назначения отдельным вызовом (что происходит, если i больше конца массива?):

const int maxData = 10;
int Data[maxData];

int i;
int tmp;
sscanf(line, "Data[%d]=0x%d", &i, &tmp);

if( i >= maxData )
{
    printf("Error! index was too big");
}
else
{
    Data[i] = tmp;
}

[Редактировать] @ опущенные избиратели: я знаю, что это не работает, я просто пытался убедить ФП попробовать это для себя / нее

...