-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