Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.95/62: Рейтинг темы: голосов - 62, средняя оценка - 4.95
1rop
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
1

сложить char* c char

12.01.2012, 16:21. Просмотров 11483. Ответов 35
Метки нет (Все метки)

подскажите пожалуйста как сложить строку типа char* с символом типа char (например 12 сложить с 3 чтобы получилось 123)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2012, 16:21
Ответы с готовыми решениями:

Char unsigned char signed char длинна Кааак
Здравствуйте. char l = {0,0}; l = 0xff; Почему, меня, компилятор...

Ошибка: "char *concat(char *,.)": невозможно преобразовать аргумент 1 из "const char [4]" в "char *"
делал задание, но на строке 36 строке пишет, что "char *concat(char *,...)":...

Как сложить два char?
Как сложить два char?

Из нескольких char сложить в int
Добрый день. Есть переменная на 4 байта, а так же 4 переменных в 1 байт....

Сложить столбиком два числа char
как сложить столбиком 2 числа записанных в char? Объясните кодом

35
silent_1991
Эксперт С++
5010 / 3070 / 270
Регистрация: 11.11.2009
Сообщений: 7,044
Завершенные тесты: 1
12.01.2012, 16:33 2
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <string.h>
 
char *str_add_chr(char *str, char chr)
{
    size_t len = strlen(str);
    
    str[len] = chr;
    str[len + 1] = '\0';
    
    return str;
}
 
int main()
{
    char str[4] = "12";
    char chr = '3';
    
    printf("%s\n", str_add_chr(str, chr));
    
    return 0;
}
Разумеется, входная строка str должна быть способна вместить strlen(str) + 2 символов.
1
cyberobot
15 / 15 / 8
Регистрация: 01.09.2011
Сообщений: 66
12.01.2012, 16:33 3
strcat();
1
silent_1991
Эксперт С++
5010 / 3070 / 270
Регистрация: 11.11.2009
Сообщений: 7,044
Завершенные тесты: 1
12.01.2012, 16:35 4
cyberobot, только для двух строк.

Добавлено через 41 секунду

Не по теме:

Честно пытался вспомнить стандартную функцию, которая делает подобное, ибо у меня есть стойкое впечатление, что она была... Но так и не вспомнил.

1
go
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
12.01.2012, 16:35 5
C
1
2
char s[10] = "12";
strcat (s, "3");
1
1rop
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
12.01.2012, 16:38  [ТС] 6
Спасибо)
0
fasked
Эксперт С++
4982 / 2561 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
12.01.2012, 16:51 7
Цитата Сообщение от silent_1991 Посмотреть сообщение
только для двух строк.
Ой ли
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <string.h>
#include <stdio.h>
 
int main() 
{
   char srcs[4][BUFSIZ] = 
   {
      "abc", "def", "ghi", "jkl"
   };
   
   char dst[BUFSIZ] = "";
   printf("%s\n", strcat(dst, strcat(srcs[0], strcat(srcs[1], strcat(srcs[2], srcs[3])))));
                         
   return 0;
}
0
silent_1991
12.01.2012, 16:56
  #8

Не по теме:

fasked, мошенство, сударь :rofl: И формально это меня не опровергает :D

0
1rop
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
12.01.2012, 17:22  [ТС] 9
silent_1991, только ругается на операцию
C++
1
size_t len = strlen(str);
даже незнаю почему пробовал
C++
1
int len = strlen(str);
все равно пишет "приложение остановлено так как оно получило сигнал от операционной системы
сигнал SIGSEGV
назначение Segmentation fault"
0
silent_1991
Эксперт С++
5010 / 3070 / 270
Регистрация: 11.11.2009
Сообщений: 7,044
Завершенные тесты: 1
12.01.2012, 17:25 10
1rop, вы код меняли? Если да, покажите его.
0
Day
1161 / 966 / 83
Регистрация: 29.10.2009
Сообщений: 1,385
12.01.2012, 17:29 11
1rop, покажи как ты определил str и что с ней делал. Те. все вхождения str в твой код.
Есть подозренья, что str твое нулем не кончается, и функция strlen, пытаясь определить конец строки, залезает куды не положено.
0
1rop
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
12.01.2012, 17:30  [ТС] 12
вот что я делаю
C++
1
2
3
4
5
6
7
8
9
10
11
chislo=new char*[i];
chislo[i]=new char(0);
//потом
size_t len=strlen(chislo[i]);
char* ch=chislo[i];
delete[] chislo[i];
chislo[i]=new char(len+1);
chislo[i]=ch;
chislo[i][len]=s1;
chislo[i][len+1]='\0';
//и потом при добавлении еще 1о символа только вторая часть выполняется(после слова потом))
входные значения s1 и i
0
silent_1991
Эксперт С++
5010 / 3070 / 270
Регистрация: 11.11.2009
Сообщений: 7,044
Завершенные тесты: 1
12.01.2012, 17:34 13
1rop, какое-то мясо...
вы в строке 6 запомнили указатель на chislo[i], а затем, в строке 7, удалили эту память. Теперь как chislo[i], так и ch, указывают на память, которая программе не принадлежит.
В строке 8 вы снова выделяете память для chislo[i], но в строке 9 эта память утекает, потому как вы затираете указатель значением из ch, который указывает на мусорную память. Ну а дальше вы пытаетесь с этой памятью работать, отчего и падает программа.
А теперь внимание, вопрос: вы чего добивались?
0
go
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
12.01.2012, 17:36 14
Цитата Сообщение от 1rop Посмотреть сообщение
size_t len=strlen(chislo[i]);
По всей видимости i-ый указатель не существует (мусор). Следите за i, или Вы его все же правильно инициализировали?
1
1rop
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
12.01.2012, 17:39  [ТС] 15
я хотел что бы у меня в строку chislo[i] приписывался символ из s1

тип char** chislo;
char s1;
int i;
0
silent_1991
Эксперт С++
5010 / 3070 / 270
Регистрация: 11.11.2009
Сообщений: 7,044
Завершенные тесты: 1
12.01.2012, 17:42 16
А вы не хотите использовать std::string? Там всё куда красивее.
0
1rop
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
12.01.2012, 17:52  [ТС] 17
ну в задании нужно char использовать и смысл как раз в работе с памятью, то есть динамически выделять и изменять, по идее я создаю массив строк, и потом увеличиваю или уменьшаю его, а разве при присваивании ch=chislo[i] я не копирую данные из памяти?
или надо было писать ch=new char(len);? и потом присвоение

Добавлено через 4 минуты
go, это я учел, у меня код этот разделен на 2 функции, где для выделения памяти i+1 передается
0
silent_1991
Эксперт С++
5010 / 3070 / 270
Регистрация: 11.11.2009
Сообщений: 7,044
Завершенные тесты: 1
12.01.2012, 17:53 18
1rop, нет, конечно. Да и если бы даже копировали - то куда? ch - всего лишь указатель, памяти он занимает ровно столько, сколько надо для хранения одного адреса. Поэтому если бы данные копировались, программа падала бы из-за этой строки, причём по той же причине (попытка работы с памятью, недоступной программе). Чтобы скопировать одну строку в другую, нужно использовать функцию strcpy, причём строка-хранилище должна быть способна вместить строку-источник плюс один символ.
1
1rop
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
12.01.2012, 18:08  [ТС] 19
вот я исправил, но все равно такая же ошибка, к тому же эта строка раньше выделения и удаления памяти
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//i=0;
//s1='1';
chislo=new char*[i+1];
chislo[i+1]=new char(0);
int len=strlen(chislo[i]);
char* ch;
ch=new char(len+1);
strcpy(ch,chislo[i]);
delete[] chislo[i];
chislo[i]=new char(len+2);
strcpy(chislo[i],ch);
chislo[i][len]=s1;
chislo[i][len+1]='\0';
память для ch выделяется но ошибка на определении длины строки
0
silent_1991
Эксперт С++
5010 / 3070 / 270
Регистрация: 11.11.2009
Сообщений: 7,044
Завершенные тесты: 1
12.01.2012, 18:11 20
1rop, залейте-ка код полностью.
0
12.01.2012, 18:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2012, 18:11

(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&
astxx::manager::connection::connection(std::basic_string&lt;char,...

Error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в 'char *'
error C2664: sprintf: невозможно преобразовать параметр 1 из 'const char *' в...

Ошибка в cannot convert char * to char вроде поправил теперь выводит ересь(
Всем доброго дня! У меня такая проблемка.... написал программу, но сначала она...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru