-1

我不太明白这些错误来自哪里。我正在尝试创建一个简单的 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

4 回答 4

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 语句之外的消息是一个未声明的变量。

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

offset和你的其他message错误一样。

于 2013-08-03T01:25:20.427 回答
1
printf("%c\n", obscufate_char(message[i]),offset);

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

printf("%c\n", obscufate_char(message[i],offset));
于 2013-08-03T07:12:35.583 回答
1

首先,您的 : 中存在语法错误main

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

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

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

其次,您应该在 'if' 之外声明messageoffset最好在main. 因为在 an 中声明在if它之外不起作用,所以ifor循环中声明也是如此。

于 2014-12-07T05:14:53.917 回答
0

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

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

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

于 2013-08-03T01:31:02.917 回答