Я не могу комментировать @Ian Ippolito ответ (потому что я был бы, если бы у меня был представитель), но в соответствии с документом, связанным с его комментарием, я вполне уверен, что вы можете найти версию Chrome для IOS. https://developer.chrome.com/multidevice/user-agent?hl=ja перечисляет UA как: Mozilla / 5.0 (iPhone, iPhone iPhone OS 10_3, как Mac OS X) AppleWebKit / 602.1. 50 (KHTML, например, Gecko) CriOS / 56.0.2924.75 Mobile / 14E5239e Safari / 602.1
Итак, это должно работать:
if ((verOffset = nAgt.indexOf('CriOS')) != -1) {
//Chrome on iPad spoofing Safari...correct it.
browser = 'Chrome';
version = nAgt.substring(verOffset + 6);//should get the criOS ver.
}
Не удалось проверить (в противном случае я улучшил бы его ответ), чтобы убедиться, что мой iPad у себя дома, и я на работе, но я думал, что я его поместил.
Вы забыли разыменовать указатель:
cout << *(printpart1 + i) << endl;
^
Кроме того, вы объявляете параметр как массив указателей , вы должны удалить часть массива:
[ 111]... и измените вызов функции на
printpart1(ARRAY_SIZE, part1PTR);
^
Пожалуйста, проверьте ниже.
cout << (*printart1)[i]<< endl;
Похоже, вы не понимаете, как объявлять и использовать массив из string
и массив указателей на string
.
string part1[ARRAY_SIZE] = { "...", "...", ...
Вы объявляете part1
как массив строк . Но тогда, кажется, есть некоторая путаница в том, как передать этот массив в printpart1()
. Вы предоставляете объявление как:
void printpart1(..., string *printpart1[18]) {
Где printpart1
указывает, что параметр printpart1
будет массивом указателей на строку. Затем вы вызываете printpart1()
как:
printpart1(ARRAY_SIZE, &part1PTR);
Где вы объявили part1PTR
как указатель на строку . Передавая адрес из part1PTR
, вы предоставляете printpart1()
указатель для указателя на string
.
Чтобы получить фактическую строку для печати, сначала необходимо разыменовать printpart1
(например, *printpart1
), чтобы получить указатель на строку перед применением любого смещения и разыменования, например, *(*printpart1 + i)
.
Например, следующее обеспечит желаемый вывод строки:
void printpart1(int length, string *printpart1[18]) {
int dummy;
for (int i = 0; i < length; i++)
cout << *(*printpart1 + i) << endl;
cin >> dummy;
}
(примечание : *(*printpart1 + 1)
эквивалентно (*printpart1)[i]
. Все, что имеет больше смысла) Вам обычно используется вторая форма)
Просто передайте массив
Теперь все это чрезмерно усложняет то, что должно быть так просто, как передача самого массива в printpart1()
, например если вы измените свою функцию на:
void printpart1(int length, string *printpart1) {
int dummy;
for (int i = 0; i < length; i++)
cout << printpart1[i] << endl;
cin >> dummy;
}
Вы больше не нуждаетесь в part1PTR
и можете просто вызвать вашу функцию с помощью:
printpart1 (ARRAY_SIZE, part1);
Посмотрите вещи, продумайте их и позвольте мне знать, если у вас есть дополнительные вопросы.