为什么这会引发分段错误?
我已将程序调试到此,这是错误的?有谁可以解释为什么?
char code1[] = "abcdefghijklmnopqrstuvwxyz ";
char code2[] = "bpduhijkaltxwmrzfoysvngeqc ";
void code(char *encode[]){
char encoded[strlen(encode)];
strcpy (encoded, encode);
int i = 0;
int j = 0;
while (encode[i] != '\0'){
while(encode[i] != code1[j]){
j++;
}
encoded[i] = code2[j];
i++;
j=0;
}
i=0;
printf("The word is: %s \n", encoded);
}
答案 0 :(得分:1)
您未在结果字符串中包含空字节'\0'
。一个c-string以'\0'
字符结尾,该字符不包括在长度中:
char encoded[strlen(encode)+1];
strcpy(encoded, encode);
此外,您需要检查以确保encode
中的每个字符都在code1
中,否则您将访问code
以外的数据。您可以添加code1[j] == '\0'
的检查并跳过该字符。您还应该查看strchr
函数来搜索角色而不是自己动手。
答案 1 :(得分:0)
这会运行,但不会按预期方式运行。问题在于编码解码,这是另一个问题!
char code1[] = "abcdefghijklmnopqrstuvwxyz ";
char code2[] = "bpduhijkaltxwmrzfoysvngeqc ";
char code3[99]={0};
void code( char *encode[] )
{
char encoded[strlen( encode )];
strcpy( encoded, encode );
int i = 0;
int j = 0;
while ( encode[i] != '\0' )
{
while ( encoded[i] != code1[j] ) // encoded not encode
{
j++;
}
encoded[i] = code2[j];
i++;
j = 0;
}
i = 0;
printf( "The word is: %s \n", encoded );
}
int main( )
{
strcpy( code3 , "once upon a time there was a lost coder");
code( code3 );
}