我在C中的简单加密有什么问题? (cs50 pset 2 - crypt)

时间:2013-08-03 01:15:25

标签: c cs50

我不太明白这些错误来自哪里。我正在尝试创建一个简单的C程序,它接受一个字符串并为ASCII值添加一个偏移量,以便创建一个非常简单的加密。

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

char obscufate_char(char origchar, int offset){
    if(strcmp(origchar, " ") != 0){
        int temp = origchar;
        char newChar = temp + 4;
        return newChar;
    }
    else{
        return 20;
    }
} 

int main(int argc, string argv[]){

    if(argv[1] != NULL){
        string message = argv[1];
    }else{
        printf("%s\n", "Enter a string to encrypt\n");
        string message = GetString();
    }

    if(argv[2] != NULL){
        int offset = atoi(argv[2]);
    }else{
        printf("%s\n", "Enter a offset\n");
        int offset = GetInt();
    }

    printf("%s%s\n", "Your original text is: ", message);
    printf("%s\n", "Your new message is: ");
    for(int i = 0; i < strlen(message); i++){
        printf("%c\n", obscufate_char(message[i]),offset);
    }

    return 0;
}
simple_crypt.c:7:12: error: incompatible integer to pointer conversion passing
      'char' to parameter of type 'const char *'; take the address with &
      [-Werror]
        if(strcmp(origchar, " ") != 0){
                  ^~~~~~~~
                  &
/usr/include/string.h:143:34: note: passing argument to parameter '__s1' here
extern int strcmp (__const char *__s1, __const char *__s2)
                                 ^
simple_crypt.c:20:10: error: unused variable 'message'
      [-Werror,-Wunused-variable]
                string message = argv[1];
                       ^
simple_crypt.c:23:10: error: unused variable 'message'
      [-Werror,-Wunused-variable]
                string message = GetString();
                       ^
simple_crypt.c:27:7: error: unused variable 'offset' [-Werror,-Wunused-variable]
                int offset = atoi(argv[2]);
                    ^
simple_crypt.c:30:7: error: unused variable 'offset' [-Werror,-Wunused-variable]
                int offset = GetInt();
                    ^
simple_crypt.c:33:46: error: use of undeclared identifier 'message'
        printf("%s%s\n", "Your original text is: ", message);
                                                    ^
simple_crypt.c:35:28: error: use of undeclared identifier 'message'
        for(int i = 0; i < strlen(message); i++){
                                  ^
simple_crypt.c:36:33: error: use of undeclared identifier 'message'
                printf("%c\n", obscufate_char(message[i]),offset);

4 个答案:

答案 0 :(得分:1)

simple_crypt.c:7:12: error: incompatible integer to pointer conversion passing
      'char' to parameter of type 'const char *'; take the address with &
      [-Werror]
        if(strcmp(origchar, " ") != 0){

当函数需要char *时传递一个字符。 origchar不是char *。

simple_crypt.c:20:10: error: unused variable 'message'
      [-Werror,-Wunused-variable]
                string message = argv[1];

我假设cs50.h对你有一个'字符串'类型。您正在if语句中进行初始化,并且您希望在if语句的范围之外看到它,这是不会发生的。 if语句之外的message与里面的message不同。内部的消息只是声明和初始化,但没有做任何事情,基本上使它的范围未使用。对于编译器,if语句之外的消息是未声明的变量。

您应首先在if语句之外声明message,以便编译器知道该消息是并且将在main范围内创建,或至少在if语句的范围之外被看到。您可以在if语句中为其赋值,但如果您希望在if语句之外看到它,则不应在if语句中声明它。 if语句有自己的范围,因此在完成之后,您初始化的message将会消失而不对其执行任何操作。

offset和其他message错误相同。

答案 1 :(得分:1)

printf("%c\n", obscufate_char(message[i]),offset);

您没有正确关闭括号。你的函数有两个参数。

printf("%c\n", obscufate_char(message[i],offset));

答案 2 :(得分:1)

首先,main

中存在语法错误

printf("%c\n", obscufate_char(message[i]),offset);

应该是,否则你的整个obscufate_char()都会失败

printf("%c\n", obscufate_char(message[i], offset));

其次,您应该在{if'之外声明messageoffset,最好是在main的开头。 因为在if内声明不起作用,所以在i循环中声明for也是如此。

答案 3 :(得分:0)

if语句之前声明变量,然后在if分支中为它们赋值。

string message; 
if() 
{
   message = Whatever;
} 
else 
{
   message = SomethingElse;
};

如果未满足第19行的第一个message条件,则第20行声明的if(argv[1] != NULL)变量未使用