почему я не могу сравнить строки - PullRequest
0 голосов
/ 04 октября 2018

Что должна делать программа:

Получает код ДНК от пользователя

Получает 10 трехбуквенных слов

Если комбинация любых 2 3-буква соответствует коду ДНК, который печатает программа.

Надеюсь, мне удалось это хорошо объяснить.

Я не знаю, почему это происходит, но я думаю, что речь идет о двойном указателеЯ пытался сделать.Или вещь strcmp.

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

int main()
{
    char * dna;
    char ** sample;
    int i,j,len;

    dna = (char*) malloc(sizeof(char)*20);

    gets(dna);
    sample = (char **) malloc(sizeof(char*)*10);
    for(i=0; i<5; i++)
    {
        sample[i] = (char *) malloc(sizeof(char)*3);
    }

    for(i=0; i<5; i++)
    {
        gets(sample[i]);
    }

    for(i=0; i<5; i++)
    {
        for(j=0; j<5; j++)
        {
            strcat(sample[i],sample[j]);
            if(strcmp(sample[i], dna)==0)
            {
                puts(sample[i]);
                return 0;
            }
        }
    }

    for(i=0;i<5;i++)
    {
        free(sample[i]);
    }

    free(sample);
    free(dna);
    return 0;
}

1 Ответ

0 голосов
/ 04 октября 2018

вычисления в вашей памяти неверны, память, выделенная для sample[i] и sample[j], точно такая же, но вы пытаетесь объединить в sample[i], что не правильно

strcat(sample[i],sample[j]);

Вкл.совершенно другое примечание из руководства gets

Никогда не используйте gets().Поскольку невозможно заранее не знать, сколько символов будет прочитано gets(), а из-за того, что gets() будет продолжать хранить символы после конца буфера, использовать его крайне опасно.Он был использован для взлома компьютерной безопасности.Вместо этого используйте fgets().

...