C字符串数组顺序操作

时间:2014-11-09 05:36:03

标签: c arrays

我正在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];
        }
    }
}

1 个答案:

答案 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;
}