Как ведет себя массив символов при инициализации через strcpy? - PullRequest
0 голосов
/ 27 сентября 2018

Я пишу простой код, чтобы найти строку s1 из строки s2 и затем сохранить ее в строке s3.Функция возвращает 1, если строка s1 присутствует в s2, иначе 0. Я использую указатели в качестве параметров.Проблема в том, что даже когда я назначаю s1 для n, строка 30 кода не дает мне правильного вывода.Кроме того, код ведет себя ненормально.Не могли бы вы указать на ошибку?

#include<string.h>
#include<stdio.h>
int code(char * s2, char * s1, char * s3)
{
    char h[] = "";
    strcpy(h, s2);
    printf("%s\n", h);

    char n[] = "";
    strcpy(n, s1);
    printf("%s\n", n);

    char b[] = "";

    int i = 0, j = 0, flag = 0, flag2 = 0;

    for (i = 0; n[i] != '\0'; i++)
    {
        printf("%d\n", i);
        printf("%c\n", n[i]);
        for (j = 0; h[j] != '\0'; j++)
        {
            printf("%c\n", h[j]);
            if (n[i] == h[j])
            {
                flag = 1;
                break;
            }

        }
        if (flag == 1)
        {
            break;
        }
    }

    printf("%d\n", i);
    printf("%d\n", j);

    printf("%c\n", n[i]);
    printf("%c\n", h[j]);

    printf("\n");

    if (flag == 1)
    {
        printf("Here:1\n");
        printf("%c\n", h[j]);
        while (n[i] != '\0')
        {
            printf("Here: %d\n", i);
            printf("%c\n", n[i]);
            printf("%c\n", h[j]);
            if (n[i] == h[j])
            {
                printf("Here:2 %d %d\n", i, j);
                printf("%c\n", n[i]);
                printf("%c\n", h[j]);
                b[i + 1] = n[i];
                i = i + 1;
                j = j + 1;

            }
            else
            {
                printf("Here:3\n");
                flag2 = 1;
                break;
            }
        }

        if (flag2 == 1)
        {
            printf("Here:4\n");
            return 0;
        }
        else
        {
            printf("Here:5\n");
            b[i + 1] = '\0';
            s3 = b;
            return 1;
        }

    }
    else
    {
        printf("Here:6\n");
        return 0;
    }

}

Ввод: s2: ваниль s1: lla

Выход: 1

1 Ответ

0 голосов
/ 27 сентября 2018

Массивы char h, n и b имеют размер 1.

. Внесите следующие изменения в ваш код:

  char h[100] = "";  // << change here
  strcpy(h, s2);
  printf("%s\n", h);

  char n[100] = "";  // << change here
  strcpy(n, s1);
  printf("%s\n", n);

  char b[100] = "";  // << change here

С этими модификациями массивыможет содержать до 100 символов.Теперь ваш код работает более или менее.

Отказ от ответственности:

  • даже с этими модификациями ваш код все еще ужасен и неэффективен
  • изменения происходят быстро игрязные хаки, функция не будет работать, если длина строк превышает 99
  • , в вашем коде могут быть другие проблемы
  • s3 = b;, это не будет работать по нескольким причинам, ноэто другая тема
...