2016-10-18 42 views
1

所以我试图建立一个函数,它需要一个* char并将其反转。该函数需要两个参数(N是字符串的长度)修改一个字符指针?

void reverse_str(char *str, int N){ 
    char temp; 
    temp = str[i]; 
    str[i] = str[N-i]; 
    str[N-i] = temp; 
    if (i == N) 
    { 
     return; 
    } 
    i++; 
    reverse_str(*str, N); 
} 

但由于某种原因,编译器到达代码的第三行时; str[i] = str[N-i];它返回空指针'\0'

是否可以在不复制的情况下修改str?我是否做过任何错误的声明?

BTW i是一个等于0的全局值,每次递归调用函数时都会增加。

+1

“N是字符串的长度”。这意味着'str [N-0]'总是NUL。因为根据定义,C字符串具有NUL字符作为位于'strlen'索引处的最后一个字符。 – kaylum

+0

'while(N> 1){swap(&str [0],&str [N-1]); N - = 2; STR ++; ''可以做到。 – chux

回答

1

在调用函数作为第一步之前,执行N = N-1 。这将解决问题。

如果N是长度,任何char_array [N]都是'\ 0',因为它是结束字符。 (基本上是字符串终结符)。您希望在\ 0之前对所有内容进行操作,但不包括它。

+0

考虑'char x [] =“”; int N = strlen(x); N = N-1; reverse_str(x,N);''最​​好让'reverse_str()'根据需要处理'-1'。 – chux

+0

我实际上改变了它,它工作时,我== 0,但是当它增加它给我EXC_BAD_ACCESS在第三行。有什么想法吗? – Abeer

+0

你是用字符串文字来调用它吗?字符串文字表示一个不可修改的数组(更准确地说,试图修改它具有未定义的行为)。 –