分段故障时的C
为什么这会导致分割错误 我已经把我的程序调试到这一步了,这是一个错误?有人能解释一下原因吗分段故障时的C,c,fault,C,Fault,为什么这会导致分割错误 我已经把我的程序调试到这一步了,这是一个错误?有人能解释一下原因吗 char code1[] = "abcdefghijklmnopqrstuvwxyz "; char code2[] = "bpduhijkaltxwmrzfoysvngeqc "; void code(char *encode[]){ char encoded[strlen(encode)]; strcpy (encoded, encode); int i = 0; i
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
函数来搜索字符,而不是自己搜索。这会运行,但不会按您预期的方式运行。问题在于编码和解码,这是另一个问题
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 );
}
如果
encode[i]
不在code1
中,会发生什么情况?同时查看strchr
函数抱歉,我用变量更新了帖子。char-encoded[strlen(encode)]
需要字符编码[strlen(encode)+1]代码>以容纳NUL终止符。如果在此之后仍然出现分段错误,请在调试器中运行程序(事实上,在寻求他人帮助之前,应该始终是这样)。您的类型是错误的。code
的参数的类型应该是char*
,而不是char*[]
。为此,我仍然会收到更改的错误。您知道崩溃发生的确切位置吗?通过调试器运行代码。调试器指向这一行:while(encode[i]!=code1[j]){您是否包括在code1
中找到字符的检查?当我使用code1时,它工作正常,但当我尝试使用随机字符串时,仍然会出现分段错误,例如:char cat[]=“the cat sat”;感谢您的帮助good spot BTW此解决方案到底解决了什么问题?此解决方案仍然与原始代码存在相同的问题。此解决方案解决了原始问题:分段错误。它运行时,原始代码没有。现在,还有另一个问题。不,它没有:char-encoded[strlen(encode)];
。请参阅我的答案