-3
我正在研究C課程的練習,並且遇到了分段錯誤。這段代碼應該改變數組的順序。像,輸入:ad b c daa,輸出:daa c b ad。它由空間改變。所以我用strtok把它變成令牌和循環來改變順序,但是我得到了一個錯誤。我的問題是什麼是分割錯誤:11,爲什麼我會得到一個?C字符串數組順序操作
#include <stdio.h>
#include <string.h>
void changeorder(int SIZE, char string[], char changed_string[]);
int main() {
const int SIZE = 10;
char string[SIZE];
char changed_string[SIZE];
printf("Enter string: ");
fgets(string, sizeof(string), stdin);
strtok(string, " ");
size_t len = strlen(string);
if(string[len-1] == '\n') {
string[len-1] = '\0';
}
changeorder(SIZE, string, changed_string);
}
void changeorder(int SIZE, char string[], char changed_string[]) {
int i;
int j;
for(i=SIZE; i>0; i--) {
for(j=0; j<SIZE; j--) {
string[i] = changed_string[j];
}
}
}
閱讀文檔的strtok的,它不會神奇地「變成令牌」。你的例子是10個字符長,不適合'char [10]',你忘記了空終止符。 – Mat 2014-11-09 05:45:10
關於這一行:fgets(string,sizeof(string),stdin);代碼需要檢查fgets()函數的返回值,以確保將sizeof(字符串)字節讀入字符串。 (順便說一下,字符串是C++中類的名稱,因此可能不應該使用) – user3629249 2014-11-09 05:58:09
一個問題是'ad bc daa'使用了10個字符,所以你沒有調整足夠大的數組來保存數據和終止null。你使用'fgets()'這很好,但這意味着你的數據將在9個字符後被截斷。 – 2014-11-09 06:03:18