C分段错误

时间:2015-11-11 22:55:20

标签: c fault

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

我已将程序调试到此,这是错误的?有谁可以解释为什么?

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);

}

2 个答案:

答案 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 );
}