CS50维杰内尔问题。越界访问,行为未定义

时间:2019-04-03 10:35:42

标签: c cs50 vigenere

所以这是我为CS50Vigenère问题提供的解决方案;我对编程还很陌生,大概只有几个星期,所以我很抱歉我的代码形式。

这里的问题是输出不是我期望的那样。

示例:

./ vigenere ABC

输入:您好

输出:hfnLp

./ vigenere ABC

输入:HELLO

输出:HFN,P

./ vigenere培根

输入:上午11点在公园与我见面

输出:Neg zF av uf pCx bT gzrwEP OZ

(应该是“ Negh zf av huf pcfx bt gzrwep oz”)

我一无所知,因为它似乎在起作用,但是有些不正常。

我检查了几乎每一个我正在使用的整数,它们都按照我的意图工作。

itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Context mContext = v.getContext();
                final Intent intent;
    switch (getAdapterPostion()){
        case 0:
           intent =  new Intent(context, FirstActivity.class);
           break;

        case 1:
            intent =  new Intent(context, SecondActivity.class);
            break;
           ...
        default:
           intent =  new Intent(context, DefaultActivity.class);
           break;
     }
                mContext.startActivity(intent);         
            }

1 个答案:

答案 0 :(得分:1)

strlen(k)迭代之后,isupper(k[j])使用的索引超出k的结尾。

您可以更改:

if (isupper(k[j]))
{
 ci = 65;
}
else
{
 ci = 97;
}

K = k[j % strlen(k)] - ci;

收件人:

K = toupper(k[j % strlen(k)]) - 'A';

(请注意,这依赖于C标准不能保证的属性,即字母的字符代码是连续的并且按字母顺序排列。)