【发布时间】:2016-07-10 19:35:02
【问题描述】:
我正在尝试制作一个程序,当用户为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: 警告:“字符串”在此函数中未初始化 [-Wuninitialized]
char encrypted_string[strlen(string)];
谁能解释一下这个错误?谢谢
编辑: 将我的代码更改为您的建议。即使使用“-Wall”,我也根本没有收到编译错误,但是在我的程序中的某个地方它导致我遇到分段错误......有什么想法吗?我在更改代码的地方加上引号,以防我做错了。
【问题讨论】:
-
问题出在您最近的编辑中,您创建了字符串变量的两个变体:
char *string_,然后在其他任何地方使用string。让它们都一样。
标签: c debugging segmentation-fault