Конкатенация двухстрочной программы не дает правильного вывода - PullRequest
0 голосов
/ 07 апреля 2020
#include<stdio.h>
char * sstrcat(char*,char*);
void main() {
    char *c;
    char s[100] = "abcde";
    char t[] = "fghi";
    c = sstrcat(s,t);
    printf("%s",c);
}

char* sstrcat(char *s,char *t) {
    char* temp = s;
    while(*s++ != '\0');
    while((*s++ = *t++) != '\0');

    return temp;
}

Выше написанного кода я получаю вывод abcde , но ожидаемый вывод - это конкатенация строк s и t.

Пожалуйста, помогите мне выяснить, какую ошибку я делаю ? спасибо.

Ответы [ 2 ]

1 голос
/ 07 апреля 2020

Просто переместите ваш строковый итератор на один символ назад из-за '\ 0' (после выполнения while(*s++ != '\0');), и это исправит ваш код.


Объяснение:

Ваш s строка равна "abcde\0". После первого, пока l oop, итератор будет на '\0'. Если вы оставите его там, вы объедините обе строки, получив результат "abcde\0fghi\0", который печатает "abcde" из-за первого '\0'.

Вместо этого, если вы переместитесь на итератор строки s на одну позицию с (s--), вы получите эту строку как результат "abcdefghi\0", которая напечатает строку так, как вы ожидаете.

Фиксированный код:

#include<stdio.h>

char * sstrcat(char*,char*);

void main() {
    char *c;
    char s[100] = "abcde";
    char t[] = "fghi";
    c = sstrcat(s,t);
    printf("%s\n",c);
}

char* sstrcat(char *s,char *t) {
    char* temp = s;
    while(*s++ != '\0');
    s--;
    while((*s++ = *t++) != '\0');

    return temp;
}
1 голос
/ 07 апреля 2020

Эта строка

while(*s++ != '\0');

будет увеличиваться s после проведения сравнения, оставляя '\0', который является ограничителем строки в вашем массиве.

Если вы можете использовать в отладчике вы обнаружите, что все значения находятся в вашем массиве, просто printf остановится на '\0'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...