由于替换第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);
}
答案 0 :(得分:1)
char *cat = "The cat sat";
她的cat
是只读的。
s[i] = code2[letterpos];
如果需要写入内存,则需要分配内存。
char *cat = malloc(100);
更好的方法是:
char *cat = strdup("The cat sat");