我正在尝试制作一个程序,当用户输入他们想要为 argv[2]
加密/解密的字符串时,该程序将进行加密和解密。并为 argv[3]
输入“加密”或“解密” .这是我现在尝试编译和运行的代码
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
int i;
// char *string;
char *key_ch;
char key_int;
char *string_ = calloc(80, 1);
string = argv[1];
char encrypted_string[strlen(string)];
char decrypted_string[strlen(string)];
//char *key_ch;
//char key_int;
string = argv[1];
key_ch = argv[2];
key_int = atoi(key_ch);
if (argc < 3)
{
printf("Not enough arguments!\n");
exit (1);
}
if (strcmp(argv[3], "encrypt") == 0)
{
i = 0;
while(i <= strlen(string)-1)
{
encrypted_string[i] = string[i] + key_int;
i++;
}
// printf("Encrypted string: ");
i = 0;
while (i <= strlen(string) -1)
{
printf("%c", encrypted_string[i]);
i++;
}
printf("\n");
}
if (strcmp(argv[3], "decrypt") == 0)
{
i = 0;
while(i <= strlen(string) -1)
{
decrypted_string[i] = string[i] - key_int;
i++;
}
// printf("Decrypted String: ");
i = 0;
while (i <= strlen(string) -1)
{
printf("%c", decrypted_string[i]);
i++;
}
printf("\n");
}
return 0;
}
当我尝试在没有 -Wall
的情况下编译它时命令它编译得很好但是当我运行程序时我遇到了段错误,当我用 -Wall
编译时我得到了
sam0.c:9:24: warning: 'string' is used uninitialized in this function [-Wuninitialized]
char encrypted_string[strlen(string)];
谁能解释一下这个错误?谢谢
编辑: 根据您的建议更改了我的代码。即使在使用“-Wall”时我也根本没有遇到编译错误,但是在我的程序中的某个地方它导致我遇到段错误......有什么想法吗?我在更改代码的地方加上引号以供引用,以防我做错了。
最佳答案
warning: 'string' is used uninitialized in this function [-Wuninitialized]
char *string;
创建一个指向 char 的指针。此时它还不是字符串,但您将其用作字符串参数。
在使用 char *string;
之前,它必须分配内存,并且应该初始化。在其他方法中,这可以通过以下方式完成:
char *string = calloc(80, 1);//initializes with known values (NULL).
现在 string
可用,但长度为零。可以通过字符串函数分配值:
strcpy(string, argv[1]);
sprintf(string, "%s", argv[1]);
strcat(string, argv[1]);
当使用命令行输入时,argv、argc
、malloc/calloc
和字符串 cpy 函数可以通过使用 strdup
来避免。可以像这样分配一个值:
if(argc == 2)
{
char *string = strdup(argv[1]);
if(!string) return -1;
...
编辑(处理您的 OP 编辑)
您现在使用两个不同的变量:string_
和 string
char *string_ = calloc(80, 1);
^
string = argv[1];
在您的代码中使它们相同,它应该构建并运行。
关于c - 使用命令行参数解密和加密文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36179391/