Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:反转字符串时出现分段错误_C - Fatal编程技术网

C:反转字符串时出现分段错误

C:反转字符串时出现分段错误,c,C,为什么有些条目会出现分段错误,但其他条目会出现分段错误?(Argv[1]是输入的任何字符串)如果字符数为偶数,i将永远不等于j。您需要将条件更改为i

为什么有些条目会出现分段错误,但其他条目会出现分段错误?(Argv[1]是输入的任何字符串)

如果字符数为偶数,i将永远不等于j。您需要将条件更改为i如果字符数为偶数,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;
}