为什么我不能比较字符串

时间:2018-10-04 06:04:49

标签: c pointers malloc strcmp

该程序应该做什么:

从用户那里获取DNA代码

获取10个3个字母的单词

如果任意两个3个字母的组合与DNA代码程序相对应,则会打印出来。

我希望我能很好地解释它。

我不知道为什么它崩溃,但是我想这与我试图做的双指针有关。还是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 :(得分:1)

您的内存计算错误,为sample[i]sample[j]分配的内存完全相同,但是您试图将其连接到sample[i]上,这是不正确的

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

gets的手册完全不同

请勿使用gets()。因为无法不知道数据就无法知道gets()将读取多少个字符,并且由于gets()将继续存储超过缓冲区末尾的字符,所以使用它非常危险。它已被用来破坏计算机的安全性。请改用fgets()