【问题标题】:why can't i compare strings为什么我不能比较字符串
【发布时间】:2018-10-04 06:04:48
【问题描述】:

程序应该做什么:

从用户那里获取 DNA 代码

获取 10 个 3 字母单词

如果任意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;
}

【问题讨论】:

  • “我不知道为什么会崩溃”——考虑使用调试器可能是
  • 你给程序的输入是什么?
  • strcat(sample[i],sample[j]); 您希望sample[i] 保留多少个字符?
  • 你没有为 10 个单词提供记忆。而且你提供的内存只针对1个字母的单词。
  • 我将每个样本[i] 设为一个字符串数组并使其包含 3 个字母

标签: c pointers malloc strcmp


【解决方案1】:

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

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

gets的手册完全不同

永远不要使用gets()。因为事先不知道数据是不可能知道gets() 会读取多少个字符,而且因为gets() 会继续存储超过缓冲区末尾的字符,所以使用起来非常危险。它已被用来破坏计算机安全。请改用fgets()

【讨论】:

    猜你喜欢
    • 2022-06-15
    • 2023-02-01
    • 1970-01-01
    • 2012-06-17
    • 2013-07-16
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多