Ошибка в своей версии strcat - C (СИ)
Формулировка задачи:
не могу понять в чем ошибка, помогите разобраться в коде
#include <stdio.h> void strcat(char *line,char *line2); int main(void) { char *line="hello,"; char *line2=" world"; strcat(line,line2); printf("%s",*line); return 1; } void strcat(char *s,char *t) { while ((*s++)!='\0') ; while ((*s++=*t++)!='\0') ; }
Решение задачи: «Ошибка в своей версии strcat»
textual
Листинг программы
char* __fastcall strcat_(char* _dst, const char* _src) { __asm { mov edi, _dst n: mov al, byte ptr [esi] cmp al, '\0' je e; inc esi jmp n; e: mov esi, _src n_: mov al, byte ptr [esi] mov byte ptr[edi], al or al, '\0' jz e_; inc esi inc edi jmp n_; e_: }; return _dst; } void main(void){ char str[255]; strcpy(str, "Assembler-embed to C/C++"); strcat_(str, ", SUPER Saymon De, escander, escape, seven my number."); cout << "elapsed: " << str << endl; }
Объяснение кода листинга программы
- В функции
strcat_
мы имеем два указателя:_dst
и_src
. _dst
указывает на строку, к которой мы хотим добавить символ, а_src
указывает на строку, из которой мы хотим взять символ.- Процесс начинается с первого байта строки
_src
и продолжается до тех пор, пока не встретится нулевой символ. - Каждый символ из
_src
копируется в_dst
с помощью операцииmov
. - Если текущий символ из
_src
является нулевым, то процесс завершается. - В конце функции возвращается указатель на исходную строку
_dst
. - В функции
main
мы объявляем строкуstr
типаchar
с максимальной длиной 255 символов. - С помощью функции
strcpy
мы копируем строкуAssembler-embed to C/C++
в нашу строкуstr
. - С помощью функции
strcat_
мы добавляем строку, SUPER Saymon De, escander, escape, seven my number.
к нашей строкеstr
. - С помощью функции
cout
мы выводим итоговую строку на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д