-1

デバッガーを実行しようとすると、次のエラーが発生し続けます。

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x0000000000000000
0x00007fff8c2414f0 in strlen ()

これが私のコードです:

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

int main(int argc, char *argv[])
{
    char s2[25];
    strcpy(s2, argv[1]);
    int keyLen = strlen(s2);
    printf("Please enter a string of text to be encrypted!\n");
    string p = GetString();
    for (int i = 0, n = strlen(p); i < n; i++)
    {
        if (isupper(p[i])){
        int sum = (p[i] - 'A') + (s2[i % keyLen] - 'A');
        char c = 'A' + sum%26;
        printf("%c", c);
        }
    }
    printf("\n");
    printf("%d\n", keyLen);

}

エラーなしでコードをコンパイルでき、正常に動作します。デバッガーを実行してforループにステップインし、数学が何をしているかを調べて理解を深めています。

4

3 に答える 3

1

GetString()を返す場合null、呼び出すstrlen(null)とこのエラーが発生します。のその他のエラーGetString()もこれを引き起こしている可能性があります。

于 2012-10-19T14:37:10.100 に答える
1

Cの型「文字列」とは何ですか? Strlen() は、カスタムの「文字列」型ではなく、C 型の配列を想定しています。(+上で指摘したように null 入力の可能性があります)

于 2012-10-19T14:44:08.283 に答える
0

hmjd のおかげでようやく取得できました 間違って実行していました プログラムを開始します

gdb vignere HHHHH

私はそれを実行しました

gdb vignere
run HHHHHH

そしてそれは完璧に機能しました!

于 2012-10-19T14:42:11.340 に答える