我正在C课程上练习并且我遇到了分段错误。这段代码应该改变数组的顺序。比如,输入:ad b c daa,输出:daa c b ad。它随着空间而变化。所以我用strtok把它变成了令牌和循环来改变顺序,但是我得到了一个错误。我的问题是什么是分段错误:11,为什么我得到一个?
#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];
}
}
}
答案 0 :(得分:0)
#include <stdio.h>
#include <string.h>
void changeorder(size_t len, char string[], char changed_string[]);
int main(void) {
const int SIZE = 16;
char string[SIZE];
char changed_string[SIZE];
printf("Enter string : ");
fgets(string, sizeof(string), stdin);
strtok(string, "\n");
size_t len = strlen(string);
changeorder(len, string, changed_string);
printf("'%s'\n", changed_string);
return 0;
}
void changeorder(size_t len, char string[], char changed_string[]) {
char temp[len];
int i=0, k=0;
while(len--){
if(string[len] != ' ')
temp[k++] = string[len];
if(string[len] == ' ' || !len){
while(k)
changed_string[i++] = temp[--k];
if(string[len] == ' ')
changed_string[i++] = ' ';
}
}
changed_string[i] = 0;
}