Как сделать так, чтобы этот код выводил реальный текст в строках, а не адрес памяти?

Я не могу комментировать @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 у себя дома, и я на работе, но я думал, что я его поместил.

0
задан Jonathan Fountain 25 February 2019 в 01:49
поделиться

3 ответа

Вы забыли разыменовать указатель:

cout << *(printpart1 + i) << endl;
        ^

Кроме того, вы объявляете параметр как массив указателей , вы должны удалить часть массива:

[ 111]

... и измените вызов функции на

printpart1(ARRAY_SIZE, part1PTR);
                       ^
0
ответ дан iBug 25 February 2019 в 01:49
поделиться

Пожалуйста, проверьте ниже.

cout << (*printart1)[i]<< endl;
0
ответ дан Ahn Dennis 25 February 2019 в 01:49
поделиться

Похоже, вы не понимаете, как объявлять и использовать массив из 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);

Посмотрите вещи, продумайте их и позвольте мне знать, если у вас есть дополнительные вопросы.

0
ответ дан David C. Rankin 25 February 2019 в 01:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: