Страница 1 из 1

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

Добавлено: 27 сен 2004, 09:00
admsasha
Как объяденить слова ?
т.е. например
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


как еще можно это сделать ?

Добавлено: 27 сен 2004, 17:57
Tima
Для начала нужно обьявлять не указатели на символы, а массивы символов. Далее - если строка не проинициализирована, то не надо ее использовать. И еще - для конкатенации при помощи 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" ;)

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

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

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

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