Форум программистов, компьютерный форум CyberForum.ru

сложить char* c char - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 71, средняя оценка - 4.70
1rop
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
12.01.2012, 16:21     сложить char* c char #1
подскажите пожалуйста как сложить строку типа char* с символом типа char (например 12 сложить с 3 чтобы получилось 123)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.01.2012, 16:33     сложить char* c char #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 символов.
cyberobot
 Аватар для cyberobot
15 / 15 / 1
Регистрация: 01.09.2011
Сообщений: 66
12.01.2012, 16:33     сложить char* c char #3
strcat();
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.01.2012, 16:35     сложить char* c char #4
cyberobot, только для двух строк.

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

Не по теме:

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

go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
12.01.2012, 16:35     сложить char* c char #5
C
1
2
char s[10] = "12";
strcat (s, "3");
1rop
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
12.01.2012, 16:38  [ТС]     сложить char* c char #6
Спасибо)
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
12.01.2012, 16:51     сложить char* c char #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;
}
silent_1991
12.01.2012, 16:56
  #8

Не по теме:

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

1rop
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
12.01.2012, 17:22  [ТС]     сложить char* c char #9
silent_1991, только ругается на операцию
C++
1
size_t len = strlen(str);
даже незнаю почему пробовал
C++
1
int len = strlen(str);
все равно пишет "приложение остановлено так как оно получило сигнал от операционной системы
сигнал SIGSEGV
назначение Segmentation fault"
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.01.2012, 17:25     сложить char* c char #10
1rop, вы код меняли? Если да, покажите его.
Day
 Аватар для Day
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
12.01.2012, 17:29     сложить char* c char #11
1rop, покажи как ты определил str и что с ней делал. Те. все вхождения str в твой код.
Есть подозренья, что str твое нулем не кончается, и функция strlen, пытаясь определить конец строки, залезает куды не положено.
1rop
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
12.01.2012, 17:30  [ТС]     сложить char* c char #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
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.01.2012, 17:34     сложить char* c char #13
1rop, какое-то мясо...
вы в строке 6 запомнили указатель на chislo[i], а затем, в строке 7, удалили эту память. Теперь как chislo[i], так и ch, указывают на память, которая программе не принадлежит.
В строке 8 вы снова выделяете память для chislo[i], но в строке 9 эта память утекает, потому как вы затираете указатель значением из ch, который указывает на мусорную память. Ну а дальше вы пытаетесь с этой памятью работать, отчего и падает программа.
А теперь внимание, вопрос: вы чего добивались?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
12.01.2012, 17:36     сложить char* c char #14
Цитата Сообщение от 1rop Посмотреть сообщение
size_t len=strlen(chislo[i]);
По всей видимости i-ый указатель не существует (мусор). Следите за i, или Вы его все же правильно инициализировали?
1rop
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
12.01.2012, 17:39  [ТС]     сложить char* c char #15
я хотел что бы у меня в строку chislo[i] приписывался символ из s1

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

Добавлено через 4 минуты
go, это я учел, у меня код этот разделен на 2 функции, где для выделения памяти i+1 передается
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.01.2012, 17:53     сложить char* c char #18
1rop, нет, конечно. Да и если бы даже копировали - то куда? ch - всего лишь указатель, памяти он занимает ровно столько, сколько надо для хранения одного адреса. Поэтому если бы данные копировались, программа падала бы из-за этой строки, причём по той же причине (попытка работы с памятью, недоступной программе). Чтобы скопировать одну строку в другую, нужно использовать функцию strcpy, причём строка-хранилище должна быть способна вместить строку-источник плюс один символ.
1rop
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
12.01.2012, 18:08  [ТС]     сложить char* c char #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 выделяется но ошибка на определении длины строки
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2012, 18:11     сложить char* c char
Еще ссылки по теме:

C++ Ошибка в cannot convert char * to char вроде поправил теперь выводит ересь(
сложить столбиком два числа char C++
array char* to char* (значения массива указателей в один указатель) C++

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
12.01.2012, 18:11     сложить char* c char #20
1rop, залейте-ка код полностью.
Yandex
Объявления
12.01.2012, 18:11     сложить char* c char
Ответ Создать тему
Опции темы

Текущее время: 23:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru