-1

これらのエラーがどこから来ているのかよくわかりません。非常に単純な暗号化を作成するために、文字列を受け取り、ASCII 値にオフセットを追加する単純な C プログラムを作成しようとしています。

#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メッセージが main のスコープ内で作成され、作成されること、または少なくとも if ステートメントのスコープ外で表示されることをコンパイラが認識できるように、最初に if ステートメントの外で宣言する必要があります。if ステートメントで値を代入できますが、if ステートメントの外に表示されることが予想される場合は、if ステートメント内で宣言しないでください。if ステートメントには独自のスコープがあるため、それが完了すると、message初期化されたものは何も操作せずに消えます。

offset残りのmessageエラーについても同じです。

于 2013-08-03T01:25:20.427 に答える
1

まず、に構文エラーがありますmain:

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

そうでなければ、obscufate_char() 全体が失敗します

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

message第 2 に、「if」のoffset外側で宣言する必要がありますmain。内で宣言してifも外では機能しないためiforループ内で宣言する場合も同様です。

于 2014-12-07T05:14:53.917 に答える
1
printf("%c\n", obscufate_char(message[i]),offset);

括弧を正しく閉じていません。関数は 2 つの引数を取ります。

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

ifステートメントの前に変数を宣言し、ifブランチでそれらに値を割り当てます。

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

19 行目の最初の条件が満たされない場合、 message20 行で宣言された変数は使用されません。if(argv[1] != NULL)

于 2013-08-03T01:31:02.917 に答える