gpt4 book ai didi

c - 我的 Vigenere 加密程序中出现段错误

转载 作者:行者123 更新时间:2023-11-30 19:47:35 26 4
gpt4 key购买 nike

我是编程新手。这是我到目前为止编写的代码。忽略加密本身的细节;我知道这需要更多的工作。当我尝试运行该程序时,收到段错误错误消息。如果 argc != 2 我会收到消息,如果 argc == 2 它会打印出“keyword”,但随后会显示相同的消息并且不会完成程序,所以我认为该错误与引用 argv[1] 有关。

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

int main (int argc, string argv[])
{
int i = 0, n = strlen(argv[1]);
char KeyWord[i];

//makes sure command line has 2 arguements
if (2 != argc)

printf("argc != 2. Try again\n");
return 1;


//stores argv[1] as key
for (i = 0; i < n; i++)
{
KeyWord[i] = argv[1][i]; //malloc
printf("%c", KeyWord[i]);
}
printf("\n");

if (isalpha(KeyWord))
return 0;
else
{
printf("try again");
return 1;
}

int j, length;

printf("input data: ");
string message = GetString();

for (i = 0; i < n; i++)
{
for (j = 0, length = strlen(message); j < length; j++)
{
if (islower(message[j]))
message[j] = message[j] -97 + KeyWord[i];

if (isupper(message[j]))
message[j] = message[j] -65 + KeyWord[i];
}
if (i==n) i = 0;
}
}

最佳答案

在确保 argc == 2 之前,您无法在 n 的初始化中计算 strlen(argv[1])

此外,char KeyWord[i] 是错误的:由于 i 为 0,因此您没有为任何内容分配空间。这至少应该在编译时产生警告,因为数组大小必须大于 0。如果您想要动态分配(正如您的评论所建议的),您应该在计算字符串长度后使用 malloc

代码应该是:

int i = 0, n;
char *KeyWord;

// make sure command line has 2 arguments
if (2 != argc)
{
printf("argc != 2. Try again\n");
return 1;
}
n = strlen(argv[1]);
KeyWord = malloc(n+1);
/* ... */

关于c - 我的 Vigenere 加密程序中出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21321668/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com