10 / 10 / 6
Регистрация: 24.05.2013
Сообщений: 350
1

array char* to char* (значения массива указателей в один указатель)

14.05.2015, 07:09. Показов 1129. Ответов 10
Метки нет (Все метки)

Как сложить(или вывести в формате char*) все значения массива указателей(char *[]) воедино, то есть сложить строки и назначить результату новый указатель?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//Генерируем IMEI и MAC
char *uid(){
    return (char *)"860781010154932-b8b42e4fb07a";
}
//Конец генерации IMEI и MAC
 
//Генерируем данные
char *SendData(){
    char *SendData[]={
    "GET /v4/age/",uid(),"?action=ConnectV3.LoadingSceneBegin.Port_80.serverid_0.wifi HTTP/1.1\n",
    "User-Agent: Dalvik/1.6.0 (Linux: U: Android 4.0.4: Infinityll Build/IMM76D)\n",
    "Host: xa.xingcloud.com\n"
    "Connection: Keep-Alive\n",
    "Accept-Encoding: gzip",
    NULL
    };
    return (char*)SendData; //Я складываю вот так, но кажется это не правильно и ничего не получится.
}
Добавлено через 3 минуты
Попробую написать код с использованием цикла, но кажется это можно сделать без цикла.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2015, 07:09
Ответы с готовыми решениями:

В чем отличие двумерного массива типа char от массива указателей на char?
В чем отличие двумерного массива типа char и массива указателей на char ?

В программе имеется следующий фрагмент: const char a='*'; char ch; как объявится указатель-переменная
В программе имеется следующий фрагмент: const char a='*'; char ch; как объявляется...

Почему в setnamedisc нужно использовать char * для установки значения, а при возвращении значения тип метода должен быть char* ?
Вопрос такой, почему в методе setnamedisc нужно использовать char *s для установки значения, а при...

Инициализация массива указателей char
Здравствуйте. Никак не могу найти информацию по следующему вопросу. Есть фрагмент: char...

10
lss
938 / 866 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
14.05.2015, 07:15 2
Для Си-строк есть strcat().
0
10 / 10 / 6
Регистрация: 24.05.2013
Сообщений: 350
14.05.2015, 07:31  [ТС] 3
Попробовал говнокодом написать, но даже так не получается.
компилируется, но при отладке ошибка связанная со strlen возникает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//Генерируем IMEI и MAC
char *uid(){
    return (char *)"860781010154932-b8b42e4fb07a";
}
//Конец генерации IMEI и MAC
 
//Генерируем данные
char *SendData(){
    char *SendData[]={
    "GET /v4/age/",uid(),"?action=ConnectV3.LoadingSceneBegin.Port_80.serverid_0.wifi HTTP/1.1\n",
    "User-Agent: Dalvik/1.6.0 (Linux: U: Android 4.0.4: Infinityll Build/IMM76D)\n",
    "Host: xa.xingcloud.com\n"
    "Connection: Keep-Alive\n",
    "Accept-Encoding: gzip",
    NULL
    };
    char *s3 = new char[strlen(SendData[0]) + strlen(SendData[1]) + strlen(SendData[2]) + strlen(SendData[3]) + strlen(SendData[4]) + strlen(SendData[5]) + strlen(SendData[6]) + 1];
    strcpy(s3, SendData[0]);
    strcat(s3, SendData[1]);
    strcat(s3, SendData[2]);
    strcat(s3, SendData[3]);
    strcat(s3, SendData[4]);
    strcat(s3, SendData[5]);
    strcat(s3, SendData[6]);
    return (char*)s3;
}
//Конец генерации данных
0
10 / 10 / 6
Регистрация: 24.05.2013
Сообщений: 350
14.05.2015, 07:37  [ТС] 4
Код
Необработанное исключение в "0x5303d540 (msvcr100d.dll)" в "Главный сервер.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000078".
Открывается файл strlen.asm
Миниатюры
array char* to char* (значения массива указателей в один указатель)  
0
lss
938 / 866 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
14.05.2015, 07:50 5
Цитата Сообщение от drunkwolfs Посмотреть сообщение
NULL
Зачем он в массиве?

Добавлено через 7 минут
Он не связан со строкой, поэтому и ошибка.
0
10 / 10 / 6
Регистрация: 24.05.2013
Сообщений: 350
14.05.2015, 07:58  [ТС] 6
верно, спасибо.
Строки складываются успешно, но можно ли написать код лучше?
Кажется так складывать не правильно и можно как то проще.
0
Эксперт .NET
6098 / 3760 / 1528
Регистрация: 09.05.2015
Сообщений: 8,930
14.05.2015, 08:05 7
sprintf например?
0
10 / 10 / 6
Регистрация: 24.05.2013
Сообщений: 350
14.05.2015, 08:22  [ТС] 8
нет, что то типа (char *) поставить перед переменной массива и чтоб все само преобразовалось.
есть разные reinterpret_cast, c_str(), str(), (char *) и подобные им которые сами выполняют преобразования.
0
Эксперт .NET
6098 / 3760 / 1528
Регистрация: 09.05.2015
Сообщений: 8,930
14.05.2015, 08:34 9
Цитата Сообщение от drunkwolfs Посмотреть сообщение
нет, что то типа (char *) поставить перед переменной массива и чтоб все само преобразовалось.
есть разные reinterpret_cast, c_str(), str(), (char *) и подобные им которые сами выполняют преобразования.
Зачем тут вообще массив из отдельных строк? Запишите все одной строкой:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
char *uid()
{
    return "860781010154932-b8b42e4fb07a";
}
 
char *SendData()
{
    char *fmt = "GET /v4/age/%s?action=ConnectV3.LoadingSceneBegin.Port_80.serverid_0.wifi HTTP/1.1\nUser-Agent: Dalvik/1.6.0 (Linux: U: Android 4.0.4: Infinityll Build/IMM76D)\nHost: xa.xingcloud.com\nConnection: Keep-Alive\nAccept-Encoding: gzip";
    char *puid = uid();
    char *buf = new char[strlen(fmt) + strlen(puid) + 1];
    sprintf(buf, fmt, puid);
    return buf;
}
1
10 / 10 / 6
Регистрация: 24.05.2013
Сообщений: 350
14.05.2015, 08:53  [ТС] 10
Цитата Сообщение от Someone007 Посмотреть сообщение
Зачем тут вообще массив из отдельных строк? Запишите все одной строкой:
да, так проще, но в массиве удобно комментировать части строк.
Например я закомментировал "Accept-Encoding: gzip", а после него добавил пустую ячейку массива.
С вашим кодом придется каждый раз запоминать что я удалил из строки или комментировать ее целиком и добавлять измененную, а это неудобно.
0
Эксперт .NET
6098 / 3760 / 1528
Регистрация: 09.05.2015
Сообщений: 8,930
14.05.2015, 09:00 11
Можно строку разбить на несколько "строк" без массива:
C++
1
2
3
4
5
6
    char *fmt =
        "GET /v4/age/%s?action=ConnectV3.LoadingSceneBegin.Port_80.serverid_0.wifi HTTP/1.1\n"
        "User-Agent: Dalvik/1.6.0 (Linux: U: Android 4.0.4: Infinityll Build/IMM76D)\n"
        "Host: xa.xingcloud.com\n"
        "Connection: Keep-Alive\n"
        "Accept-Encoding: gzip";
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.05.2015, 09:00
Помогаю со студенческими работами здесь

Сортировка массива указателей на char
Есть массив указателей на char-ы. Нужно отсортировать их по алфавиту. Прошу помочь как можно...

Как сделать вывод массива указателей char на экран?
Доброго времени суток. Делал наброски на телефонный справочник с несколькими телефонными книгами...

Динамическое выделение памяти для массива указателей на char
Доброго времени суток! пытаюсь выделить память для массива указателей на char следующий код...

Не получается присвоить значение элементу массива указателей типа char *a[3]
В попытках разобраться с массивами, указателями, массивами указателей и т.п. написал вот такой код:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru