我的程序有問題。我用一個虛擬的alfabeth做了一個簡單的編碼 - 編,但是當試圖訪問char數組時它不能訪問該位置,怎麼回事?我不知道它是否與size_t類型而不是int類型有關?爲什麼EXC_BAD_ACCESS,無法訪問內存?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
static char * createAlfa(void);
char * codify(char *mess, char *alfa);
int
main(void)
{
char *alfa=createAlfa();
printf("write your mess to codify: \n");
char mess[]="";
scanf("%s", mess);
char *code=codify(mess, alfa);
printf("your codified message is: %s\n", code);
return 0;
}
static char *
createAlfa(void)
{
char *codealfa=malloc(sizeof(char)*27);
srand((unsigned int)time(NULL));
int i, ran;
for(i=0; i<26; i++)
{
codealfa[i]='A'+i;
if((ran=rand()%26)<i)
{
codealfa[i]=codealfa[ran];
codealfa[ran]='A'+i;
}
}
codealfa[26]=0;
return codealfa;
}
char *
codify(char *mess, char *alfa)
{
size_t len=strlen(mess);
char *code=malloc(sizeof(char)*len);
int i;
for(i=0; i<len; i++)
{
int pos=(int)(toupper(mess[i])-'A'); //pos is behaving correctly, first loop is
//it is 15 when i write "potato"
code[i]=alfa[pos]; //EXC_BAD_ACCESS, Could not access memory
}
code[i]=0;
return code;
}
你寫出我和pos作爲錯誤發生? –
提示:循環退出時'i'的值是多少?那是在你用'malloc'創建的數組的範圍之內嗎? –
你有一個錯誤的錯誤:'size_t len = strlen(mess); char * code = malloc(sizeof(char)* len);'in'codify()'。您需要添加1以爲null分配足夠的空間。警告:我進入了「馬鈴薯」並獲得了「編纂」輸出POTATO一次;這不是一個非常好的加密。 –