Объеденение слова в одно

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
admsasha
Сообщения: 5
Зарегистрирован: 21 сен 2004, 08:56

Как объяденить слова ?
т.е. например
per1="aaa";
per2="bbb";
perl3="ccc";

то per99 должно равняться "aaabbbccc"

вот как я пробую
#include <stdio.h>
#include <string.h>
main() {
char *per1="123";
char *per2="989";
char *per3;
per3=strcpy (per3, per1);
printf ("%s\n",per3);
per3=strcat (per3, per2);
printf ("%s\n",per3);
}

так все работате, но мне надо per1 изменять, пробую так:
#include <stdio.h>
#include <string.h>
main() {

char *per1;
char *per2="989";
char *per3;

per1="100";
per3=strcat (per3, per1);
printf ("%s\n",per3);
per3=strcat (per3, per2);
printf ("%s\n",per3);


per3=strcat (per3, per2);
printf ("%s\n",per3);

exit(0);
return 0;
}

Вот ответ:
# ./a.out
Segmentation fault


как еще можно это сделать ?
Tima
Сообщения: 43
Зарегистрирован: 23 сен 2004, 11:17
Откуда: Харьков
Контактная информация:

Для начала нужно обьявлять не указатели на символы, а массивы символов. Далее - если строка не проинициализирована, то не надо ее использовать. И еще - для конкатенации при помощи strcat не нужно присваивать строке результат функции, достаточно передать эту строку первым параметром. Вот решение:

char per1[20]="aaa";
char per2[]="bbb";
char perl3[]="ccc";
strcat (per1, per2);
strcat (per1, per3);
printf ("%s\n",per1);

да, и еще - не забывай создавать результирующую строку с достаточным количеством элементов для включения других строк(у меня - char per1[20]="aaa" ;)
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Вообще для формирования строки произвольной длины из любого количества отдельных фрагментов лучше использовать специальный класс потока для строки - ostrstream.
Это будет выглядеть примерно так:

ostrstream oss; // объявление потока
oss << "aaa" << "bbb" << "ccc" << 999; // запись в поток
oss << '\0'; // завершение потока строки

char *s = oss.str(); // получение результата

В результате получится строка "aaabbbccc999"
Ответить