麻烦C中的指针并在函数中使用它们

时间:2011-11-15 02:29:39

标签: c encryption

我基本上编写了一个简单的Caesar密码程序(只需用硬编码密钥12移动ASCII中的字符)但我是C的新手,因此无法使用指针并接受char数组作为输入并将它们作为输出返回。

这是我到目前为止所得到的。你能帮我弄清楚出了什么问题吗?

提前致谢。

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

int main() {

    char hello[50][50] = {{'h','e','l','l','o'}, {'h','r','u','\0'}};
    hello = encrypt(hello);

    printf("%s", hello[50][50]);

}

char** encrypt(char text[50][50]) {
    int i,j;
    for(i=0; i<50; i++) {
        for(j=0; j<50; j++) {
            if (text[i][j]!='\0') {
                text[i][j] = (char)((int)text[i][j]+12)%256;
            } else {
                break;
            }
        }
    }
    return text[50][50];

}

char** decrypt(char text[50][50]) {
    int i,j;
    for(i=0; i<50; i++) {
        for(j=0; j<50; j++) {
            if (text[i]!='\0') {
                text[i][j] = (char)((int)text[i][j]-12)%256;
            } else {
                break;
            }
        }
    }
    return text[50][50];
}

2 个答案:

答案 0 :(得分:1)

您的主要问题似乎是了解hello[50][50]的含义

char hello[50][50]中,它分配50组50个字符块。 但是它自己的hello[50][50]指的是单个字符,在第51个b锁定中的第51个位置 - 因为C计数形式为0,你的块是数字[0]到[49]所以[50]无效。 / p>

将2维数组传递给C并不是你想象的那样。

我建议使用1维数组作为长字符串,单词简单地用空格分隔 - 这将更清晰,更容易理解。

如果您将1d数组分配为 char hello[50];您可以将其传递给func(char hello[])func(char *hello)的函数,并仍在函数内使用hello [i]表示法

答案 1 :(得分:0)

执行密码的代码在某些情况下会出现一些问题。你将12添加到角色的值,然后执行一个模256.如果你传递了一个更高价值的字母,它将不会做你想要的。

示例:

('A'+ 12)%256 =&gt; (65 + 12)%256 = 77 =&gt; 'M'//按预期工作

('X'+ 12)%256 =&gt; (88 + 12)%255 = 100 =&gt; 'd'//应该是'J'

解决方案是修改函数以确保它正确包装。由于您的示例仅使用小写字母,因此我将仅涵盖该案例。

text[i][j] = (((text[i][j] - 'a') + 12) % 26) + 'a';