为什么这会引发细分错误?

我已经调试了程序,直到出现错误?有人可以解释为什么吗?

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'。 C字符串以'\0'字符结尾,该字符不包含在长度中:

char encoded[strlen(encode)+1];
strcpy(encoded, encode);


另外,您还需要检查以确保encode中的每个字符也都在code1中,否则,您将访问code之外的数据。您可以添加code1[j] == '\0'的检查并跳过该字符。您还应该查看strchr函数来搜索字符,而不要自己动手。

10-08 11:01