RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-375735

nichtdeinetraumfrau's questions

Martin Hope
nichtdeinetraumfrau
Asked: 2020-04-04 19:28:59 +0000 UTC

帮助数组溢出

  • -2

我正在编写一个适用于 Vigenere 加密的代码。在输入密钥进行加密时,出现一个问题,相同密钥的数组溢出,我不能继续前进,我已经伤透了脑筋。

输入密钥时,必须将其写入密钥数组,然后在 Encryption_Viz 函数中使用,但会发生溢出。

截图链接:https ://imgur.com/a/1lvG01o

项目: http ://cpp.sh/9zern

或者像这样:


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


#define STR_LEN 100

char alphavite[] =  "abcdefghijklmnopqrstvuwxyz";

void Input_By_File(char *started_string)
{
    FILE* pFile;
    char mystring[100];

    pFile = fopen("text.txt", "r");
    if (pFile == NULL) perror("\nError opening file");
    else {
        if (fgets(mystring, 100, pFile) != NULL) 
        {
            for (int i = 0; i < STR_LEN; i++) 
            {
                started_string[i] = mystring[i];
            }
            puts(started_string);
        }
        fclose(pFile);
    }
}

void Input_By_Yourself(char* started_string)
{
    getchar();

    gets_s(started_string, STR_LEN);
    printf(">Вы ввели строку:      '%s'\n\n", started_string);
}

void Output_Start_Info()
{

    printf("                Добро пожаловать в программу для шифровки/расшифровки текста!\n\nВ нашей программе представлен следующий виды шифрования:");
    printf("\n\n");
    printf(">Шифр Вижинера\n");
}

void Input_Start_String(char* started_string)
{
    int key;

    printf("\n\nВыбирете метод ввода данных: \n1 — Ввести вручную\n2 — Загрузить из файла\n");
    scanf_s("%i", &key);
    switch (key)
    {
    case 1: printf("\n\nПожалуйста введите текст, который хотите де-/за-шифровать, на английском языке: "); Input_By_Yourself(started_string);
        break;
    case 2: printf("\n\nПроисходит загрузка файла (text.txt) с текстом, который хотите де-/за-шифровать.\n"); printf("Ваш файл содержит следующую строку: ");  Input_By_File(started_string);
        break;
    default: printf("Вы ввели неправильный ключ, попробуйте сначала.");
        break;
    }

}

int Input_Type_of_Encryption() 
{
    int key = 0;
    printf("\n\nПожалуйста, введите номер вида шифрования, который вы хотите использовать для данной строки: ");
    scanf_s("%i", &key);

    return key;
}

int Type_Of_Work()
{
    int key;
    printf("\n\nПожалуйста, выберите тип выполняемой работы:\n1 — Зашифровать текст\n2 — Расшифровать текст\n");
    scanf_s("%i", &key);

    return key;

}

/*char Key_For_Encryption()
{
    char key[STR_LEN + 1] = "";
    printf("\n\nВведите ключ для шифрования: ");

    Input_By_Yourself(key);

    return key[STR_LEN];
}*/


void Encryption_Viz(char *started_string, char *encrypte_string)
{
    char key[STR_LEN] = "";
    printf("\n\nВведите ключ для шифрования: ");

    Input_By_Yourself(key);




    char long_string[] = " ";

    int s = strlen(started_string);
    int e = strlen(key);



    if (s >= e)
    {
        for(int i = 0; i < s; i++)
        {
            long_string[i] = key[((e+1)%(i+1))];
        }
    }

    else
    {
        for (int i = 0; i < s; i++)
        {
            long_string[i] += key[i];
        }
    }

    printf("%s ", long_string);

}

int Decryption(char* text, int k, char* key, int a, int j) 
// text - шифр-текст, key- ключ, k - длина блока text, a - длина ключа, j - каков будет размер блока расшифрованного сообщения 

{
    int i;
    for (i = 0; i < k; i++)
    {
        if (j == a - 1)
            j = 0;
        if (text[i] != 32)
        {
            if (text[i] >= 'A' && text[i] <= 'Z')
            {
                if (key[j] >= 'A' && key[j] <= 'Z')
                {
                    text[i] = ((text[i] - key[j] + 26) % 26) + 65;
                    j++;
                }
                else if (key[j] >= 'a' && key[j] <= 'z')
                {
                    text[i] = text[i] + 32;
                    text[i] = ((text[i] - key[j] + 26) % 26) + 65;
                    j++;
                }
            }
            else if (text[i] >= 'a' && text[i] <= 'z')
            {
                if (key[j] >= 'a' && key[j] <= 'z')
                {
                    text[i] = ((text[i] - key[j] + 26) % 26) + 97;
                    j++;
                }
                else if (key[j] >= 'A' && key[j] <= 'Z')
                {
                    text[i] = text[i] - 32;
                    text[i] = ((text[i] - key[j] + 26) % 26) + 97;
                    j++;
                }
            }
        }
    }
    return j;
}

int main()
{
    char started_string[STR_LEN + 1] = "";
    char encrypted_string[STR_LEN + 1] = "";

    setlocale(LC_ALL, "Russian");
    Output_Start_Info();
    switch (Type_Of_Work())
    {
        case 1: 
                Input_Start_String(started_string);
                Encryption_Viz(started_string, encrypted_string);
                break;

        case 2: 
                Input_Start_String(started_string); 
                Decryption();
                break;

        default: printf("Проверьте правильность введного ключа.");
                break;
    }


    return 0;
}

c++
  • 1 个回答
  • 10 Views
Martin Hope
nichtdeinetraumfrau
Asked: 2020-03-25 17:36:01 +0000 UTC

C上的快速排序下降[关闭]

  • 1
关闭。这个问题需要澄清或补充细节。目前不接受回复。

想改进这个问题?通过编辑此帖子添加更多详细信息并澄清问题。

2年前关闭。

改进问题

我的目标是将快速排序的源代码按升序转换为完全相同的,但按降序排列。我不太明白这段代码是如何工作的(在讲座中得到)

int split(int a[], int low, int high)
{
    int part_element = a[low];

    for (;;)
    {

        while (low < high && part_element <= a[high])
            high--;
        if (low >= high)
            break;
        a[low++] = a[high];

        while (low < high && a[low] <= part_element)
            low++;
        if (low >= high) break;
        a[high--] = a[low];
    }

    a[high] = part_element;

    return high;
}

void QuickSort(int a[], int low, int high)
{
    int middle;
    if (low >= high) return;
    middle = split(a, low, high);
    QuickSort(a, low, middle - 1);
    QuickSort(a, middle + 1, high);
} 
c++
  • 1 个回答
  • 10 Views
Martin Hope
nichtdeinetraumfrau
Asked: 2020-03-11 00:29:52 +0000 UTC

函数中的二维数组

  • -2
关闭 这个问题是题外话。目前不接受回复。

寻求调试帮助的问题(“为什么这段代码不起作用? ”)应该包括期望的行为、具体的问题或错误,以及在问题中重现它的最少代码。没有明确描述问题的问题对其他访问者毫无用处。请参阅如何创建一个最小的、独立的和可重现的示例。

2年前关闭。

改进问题

我的任务是编写代码以按列对二维数组的元素进行排序。

我有一个功能void Sort(int mas[N_suits][N_ranks], int array_size){...}

从 main 调用它时Sort(in_hand[N_suits][N_ranks], Number_of_cards_in_hand);,会显示一条消息,指出 int 类型的参数与 int(*)[] 类型的参数不兼容。问题出现了,原则上如何将二维数组传递给函数?

c++
  • 2 个回答
  • 10 Views
Martin Hope
nichtdeinetraumfrau
Asked: 2020-03-08 18:56:58 +0000 UTC

从数组中输出元素时如何输出多个字符?

  • 0

我们有const char rank_code[] = { '2', '3', '4', '5', '6', '7', '8', '9', '10', 'j', 'q', 'k','a' }; const char suit_code[] = {'h', 'd', 'c', 's'};

当输出 时printf(" %c%c", rank_code[rank], suit_code[suit]);,我们得到零而不是预期的十。任何想法如何解决这个问题?

c++
  • 2 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5