2016-10-18 41 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

你是用字符串文字來調用它嗎?字符串文字表示一個不可修改的數組(更準確地說,試圖修改它具有未定義的行爲)。 –