C:反转字符串时出现分段错误
为什么有些条目会出现分段错误,但其他条目会出现分段错误?(Argv[1]是输入的任何字符串)如果字符数为偶数,i将永远不等于j。您需要将条件更改为iC:反转字符串时出现分段错误,c,C,为什么有些条目会出现分段错误,但其他条目会出现分段错误?(Argv[1]是输入的任何字符串)如果字符数为偶数,i将永远不等于j。您需要将条件更改为i
strlen(argv[1])+1
个字符。不要忘记结尾处的空终止符'\0'
。空终止符不被计算在内。XOR是一个巧妙的技巧,但比涉及temp
变量的3个操作更难理解,效率也更高。此代码似乎取自。注意关于使用XOR交换的类似抱怨。XOR交换是很久以前发明的,当时内存的价值更高。(它的主要好处是节省了临时存储所需的内存。)在这种情况下,为了清晰和高效,您可以花费一个字节。您的反转太长了一个字符。您以长度开始j
,对于“hello”
是5,但是a[5]
不是o
,它是空终止符。(或者,至少如果word
足够大的话……因为你没有在word
中留出空间进行终止,所以你有一些未定义的行为发生。)@e0k。。。尤其是当OP浪费内存将函数参数复制为局部变量时。我确信main
代码可以是一行,即使printf
从函数移到main
(应该是:将表单与功能分开)。我建议分配strlen(argv[1])+1个
字符。不要忘记结尾处的空终止符'\0'
。空终止符不被计算在内。XOR是一个巧妙的技巧,但比涉及temp
变量的3个操作更难理解,效率也更高。此代码似乎取自。注意关于使用XOR交换的类似抱怨。XOR交换是很久以前发明的,当时内存的价值更高。(它的主要好处是节省了临时存储所需的内存。)在这种情况下,为了清晰和高效,您可以花费一个字节。您的反转太长了一个字符。您以长度开始j
,对于“hello”
是5,但是a[5]
不是o
,它是空终止符。(或者,至少如果word
足够大的话……因为你没有在word
中留出空间进行终止,所以你有一些未定义的行为发生。)@e0k。。。尤其是当OP浪费内存将函数参数复制为局部变量时。我确信main
代码可以是一行代码,即使printf
从函数移动到main
(应该是:形式与功能分开)。
void reverse_String(char a[], int start, int length){
int i;
int j = length;
for(i = start; i != j ; i++, j--){
a[i] ^= a[j];
a[j] ^= a[i];
a[i] ^= a[j];
}
printf("%s", a);
}
int main(int argc, char *argv[]){
int length;
char word[strlen(argv[1])];
strcpy(word,argv[1]);
length = strlen(word);
reverse_String(word,0,length);
return 0;
}