C 为什么可以';我不能比较字符串吗

C 为什么可以';我不能比较字符串吗,c,pointers,malloc,strcmp,C,Pointers,Malloc,Strcmp,该计划应该做什么: 从用户处获取DNA代码 获取10个三字母单词 如果任何2个3个字母的组合与DNA代码相对应,程序将打印它 我希望我能解释清楚 我不知道它为什么会崩溃,但我想这是关于我试图做的双指针的事情。或者是strcmp的事 #include <stdio.h> #include <string.h> #include <stdlib.h> int main() { char * dna; char ** sample; int

该计划应该做什么:

从用户处获取DNA代码

获取10个三字母单词

如果任何2个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;
}
#包括
#包括
#包括
int main()
{
char*dna;
炭**样品;
int i,j,len;
dna=(char*)malloc(sizeof(char)*20);
获取(dna);
样本=(char**)malloc(sizeof(char*)*10);

对于(i=0;i您的内存计算是错误的,为
sample[i]
sample[j]
分配的内存是完全相同的,但是您试图连接到
sample[i]
,这是不正确的

strcat(sample[i],sample[j]);
get的手册完全不同的注释


永远不要使用
gets()
。因为在不事先知道数据的情况下无法判断将读取多少个字符
gets()
,而且
gets()
将继续存储超过缓冲区末尾的字符,所以使用它是非常危险的。它被用来破坏计算机安全。使用
fgets()< /p> > 

“我不知道它为什么会变”——考虑使用调试器可能是你给程序的输入吗?<代码> STRCAT(示例[i],样本[j]);< /Cord>你希望有多少个字符<代码>样本[I]?
是否保留?您没有为10个单词提供内存。您提供的内存仅为1个字母的单词。我将每个样本[i]设置为一个字符串数组,并使其保留3个字母