替换密码 - 修改字符串的问题

时间:2014-11-14 15:31:25

标签: c string encryption

由于替换第33行中的字符时出现问题,以下代码在尝试运行时被破坏。我是否错误地替换了字符串中的字符?

该代码旨在加密* cat字符串中的小写字符。 code2中的每个字符都是映射的'到code1中相同位置的字符。 * cat中的小写字符将替换为code2中的替换字符。

//Ben Adamson
//v1.0
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>

void code(char *s);

int main()
{
    char *cat = "The cat sat";

    code(cat);

    _getch();
    return 0;
}

void code(char *s)
{
    char code1[] = "abcdefghijklmnopqrstuvwxyz";
    char code2[] = "bpduhijkaltxwmrzfoysvngeqc";
    char *letter;
    unsigned int i, letterpos;

    for(i=0; i<strlen(s); i++)
    {
        if(isalpha(s[i]) && islower(s[i]))
        {
            letter = strchr(code1, s[i]);
            letterpos = (int)(letter - code1);
            s[i] = code2[letterpos];
        }
    }
    printf("New string is %s", s);
}

1 个答案:

答案 0 :(得分:1)

char *cat = "The cat sat";

她的cat是只读的。

s[i] = code2[letterpos];

如果需要写入内存,则需要分配内存。

char *cat =  malloc(100);

更好的方法是:

char *cat = strdup("The cat sat");