#include <string.h>
//...
char * dest = "Hello, ";
char * src = "world!";
char * result = "";
result = strcat(dest, src);
// result будет содержать Hello, world!
strcat i naprimer iscntrl
Hotelos bi uznat vnutrennie kod dvuh funcsiy chtob imet predstavlenie...
to est.. kak pishutsya oni...
int iscntrl(int ch);
Kak ya ponyal zdes ch igraet rol adresa kotorie nahodyatsya v deapozone 0x1F i 0x7F.
i
char *strcat(char *str1, const char *str2);
(i po-russki toge uge len' stalo pe4atat', da? :) )
[quote=C++Builder Help]
char *strcat(char *dest, const char *src);
Описание
Добавляет одну строку к другой.
strcat добавляет копию src в конец dest. Длина результата будет равна strlen(dest) + strlen(src).
[/quote]
используется эта функция так:
Код:
PS: если я где-то ошибся или что-то не учёл, поправьте меня :)
dest должен указывать на область памяти, а не на строковый литерал.
Поэтому твой пример дважды не верен.
А вот result может и не инициализироваться до strcat, т.к. он в любом случае после этой операции примет значение dest.
Совет: если инициализируешь указатель строковым литералом, делай указатель на константное значение:
const char* dest = "Hello, ";
const char* src = "world!";
Т.о. отловишь множество run-time багов ещё на стадии компиляции.
по ходу дела Kama знает как эти функции работают, но ради интереса хочет взглянуть на код их реализации...
Green, спасибо ) поправил )
Поправил, но неправильно!
Сохраняя стиль, можно, например, так:
Код:
#include <string.h>
//...
char dest[100] = "Hello, ";
char * src = "world!";
char * result;
result = strcat(dest, src);
// result будет содержать Hello, world!
//...
char dest[100] = "Hello, ";
char * src = "world!";
char * result;
result = strcat(dest, src);
// result будет содержать Hello, world!
При этом следует помнить, что не result содержит результат, а буфер dest. А result всего лишь указатель на этот буфер!
Ya hotel bi znat vnutrenniy kod funksii...
Kak ona pisalas...
Kto znaet , pomogite...
Ya hotel bi znat vnutrenniy kod funksii...
Kak ona pisalas...
Kto znaet , pomogite...[/QUOTE]
Напиши вышеприведённый текст программы, установи breakpoint на оператор с strcat, запусти в среде с отладчиком. Когда выполнение программы дойдёт до этой строки, жми дальше Ctrl+Alt+C и двигайся по F7. Код очень прост.
Значит, использовать AnsiString и не мучить себя и других глупыми вопросами :)
Что это такое - читать здесь: http://www.codenet.ru/progr/bcb/AnsiString-Set.php
Код:
char *strcat(char *dst, char *src)
{
char *ch = dst;
while(*ch++);
while(*ch++=*src++);
return dst;
}
{
char *ch = dst;
while(*ch++);
while(*ch++=*src++);
return dst;
}
Dlya menya eto ne glupiy vopros i mnogie iz pro ne smogut takue "fignu" napisat....
Блин может хыватит пользоваться транслитом? Если ты настолько не уважаешь собеседников, что даже лень восспользоваться переводчиком в кирилицу, то почему думаешь тебе будут помагать?
Dlya menya eto ne glupiy vopros i mnogie iz pro ne smogut takue "fignu" napisat....[/QUOTE]
Есть Google Code Search: http://www.google.com/codesearch
С ее помощью можно найти реализации. Например strcat на linux
Код:
char * strcat(char * dest, const char * src)
{
char *tmp = dest;
while (*dest)
dest++;
while ((*dest++ = *src++) != '\0')
;
return tmp;
}
{
char *tmp = dest;
while (*dest)
dest++;
while ((*dest++ = *src++) != '\0')
;
return tmp;
}
Код:
char * __cdecl strcat (
char * dst,
const char * src
)
{
char * cp = dst;
while( *cp )
cp++; /* find end of dst */
while( *cp++ = *src++ ) ; /* Copy src to end of dst */
return( dst ); /* return dst */
}
char * dst,
const char * src
)
{
char * cp = dst;
while( *cp )
cp++; /* find end of dst */
while( *cp++ = *src++ ) ; /* Copy src to end of dst */
return( dst ); /* return dst */
}
Спасибо Мерлин!