LINUX.ORG.RU

копирование строки t в конец строки s.


0

0

необходимо копировать строку t в конец строки s.

#include <stdio.h>

void strcat(char s,char t);

int main()
{
char *a = "abcd";
char *b = "efg";

int c;

void strcat(&a[], &b[]);

for(c = 0; a[c] != '\0' ; c++)
printf("%s", a[c]);
}

void strcat(char *s, char *t)
{
while(s != '\0'){
*++s;
}

if(s == '\0'){
*s++ = *t++;
}
}


Ошибки...
test.c:5: warning: conflicting types for built-in function `strcat'
test.c: In function `main':
test.c:14: warning: parameter names (without types) in function declaration
test.c:14: warning: extern declaration of `strcat' doesn't match global one
test.c: At top level:
test.c:21: error: conflicting types for `strcat'
test.c:5: error: previous declaration of `strcat'

не могли бы растолковать их?


в твоём случае никак нельзя присоединить строку b в конец строки a. ты только можеш создать третью строку и запихнуть в неё сумму строк а+b.

а компилер ругается на неправильное имя strcat которе конфликтует со встроенной ф-ей strcat

cvv ★★★★★
()

> test.c:5: warning: conflicting types for built-in function `strcat'

В стандартной char*, у вас char

> test.c:14: warning: parameter names (without types) in function declaration

Просто переведите с английского

> test.c:21: error: conflicting types for `strcat'

Определение не соответствует объявлению в строке 5.

DKorolkov
()
Ответ на: комментарий от cvv

ugu, a razmer vudelennoj pamyatj pod 3 stroku dolzhen butj raven: size_t summaryLen = strlen(a) + strlen(b) + 1;

aton
()

char *new_str = malloc(strlen(s)+strlen(t)+1);
strcat(strcpy(new_str, s), t);

execve
()

&a[] - зачем такие ужасы?

а имеет тип char* const на с++, или char* на си так что передавай например как

size_t a_len = strlen( a );

devinull ★★
()
Ответ на: комментарий от devinull

Прога собралась но не без БАГА.

#include <stdio.h>

void strct(char *,char *, char *);

int main()
{
char *a = "abcd";
char *b = "efg";
char *new_line = strlen(a) + strlen(b) + 1;

int c;

void strct(a, b, new_line);

for(c = 0; a[c] != '\0' ; c++)
printf("%s", new_line[c]);
}

void strct(char *a, char *b, char *new_line)
{
do
*new_line++ = *a++;
while(*a != '\0');

if(*a == '\0'){
do
*new_line++ = *b++;
while(*b != '\0');

if(*b == '\0')
*new_line = '\0';
}
}

Segmentation fault
: ((((

ban
() автор топика
Ответ на: комментарий от ban

#include <stdlib.h> #include <stdio.h> #include <string.h>

char* my_strcpy( char* dst, char* src ); char* my_strcat( char* dst, char* src );

int main() { char* a = "abcd"; char* b = "efg"; char* newline = (char*)malloc( strlen( a ) + strlen( b ) + 1 );

my_strcpy( newline, a ); my_strcat( newline, b );

printf( "%s\n", newline );

free( newline ); return 0; }

char* my_strcpy( char* dst, char* src ) { char* ret = dst; while( *src ) *dst++ = *src++; *dst = '\0'; return ret; }

char* my_strcat( char* dst, char* src ) { char* ret = dst; while( *dst++ ) ; -- dst; while( *src ) *dst++ = *src++; *dst = '\0'; return ret; }

/****************************/

Не надо мудрить: do *new_line++ = *a++; while(*a != '\0'); // здесть не копируется ноль в new_line

Keep ip simple, stupid - хороший принцип.

devinull ★★
()

если хочется цикл с постусловием:
do
*new_line++ = *a;
while( *a++ );

anonymous
()
Ответ на: комментарий от ban

разбираем прогу по строчкам (:

#include <stdio.h>

void strct(char *,char *, char *);

int main()
{
char *a = "abcd";
char *b = "efg";

/* что значит вот это?: */
char *new_line = strlen(a) + strlen(b) + 1;
/*может, malloc все-таки стоило написать? */

int c;

void strct(a, b, new_line);

/*смысл писать a[c] != '\0' в то время как выражение a[c] даст тот же результат? */
for(c = 0; a[c] != '\0' ; c++)
/* %s выводит char *, тип new_line[c] какой? char */
printf("%s", new_line[c]);
/* соответственно %c */
}

void strct(char *a, char *b, char *new_line)
{
do
*new_line++ = *a++;
/* ну тут тоже while(*a) гораздо проще */
while(*a != '\0');

if(*a == '\0'){
do
*new_line++ = *b++;
while(*b != '\0');

if(*b == '\0')
*new_line = '\0';
}
}

вывод: читать K&R, думать, что делаешь.

hateful_dead
()
Ответ на: комментарий от hateful_dead

и еще там у тебя такой код:
for(c = 0; a[c] != '\0' ; c++)
printf("%s", new_line[c]);

хотя перед этим функцию strct ты не вызывал.

и еще: что значит вот такое в теле main?

void strct(a, b, new_line);


и еще: можно было и имя strcat использовать.


а в целом -- неплохой анекдот на C получился (:

hateful_dead
()
Ответ на: комментарий от hateful_dead

2hateful_dead >а в целом -- неплохой анекдот на C получился (:

А ты, наверно, СИ выучил за две минуты? все-таки без приличной книзки в нем разобраться не так уж просто. Я в своё время несколько раз порывался пойти купить книжку по VBA и перевестись на экономический факультет. А вот, когда поплся "Язык С++" Страутрупа, все пошло как по маслу.

Автору топика: Ищи умну книжку, не в ту степь тебя сейчас несёт.

devinull ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.