在 C 中不使用任何数组表示法来切换字符串

switch strings without using any array notation in C

嗨,我是指针的新手,我正在尝试编写一个函数,在不使用任何数组符号的情况下将一个字符串与另一个字符串切换,完全使用指针。

我有这个函数,它可以工作,但在这个函数中,我使用一个数组表示法。

有没有更简单、更好的方法来做到这一点?谢谢。

void stringtausch(char *eins, char *zwei) {
    char first[50], *philfe = first, *one = eins, *two = zwei;
    while(*one != '[=10=]') {
        *philfe++ = *one++;
    }
    *philfe = '[=10=]';
    while(*two != '[=10=]') {
        *eins++ = *two++;
    }
    *eins = '[=10=]';
    philfe = first;
    while(*philfe != '[=10=]') {
        *zwei++ = *philfe++;
    }
    *zwei = '[=10=]';
}

嗯,一个更简单的方法是使用 strcpy,但如果您想按照自己的方式进行操作,它会更容易。指针指向数组或单个单元格的第一个单元格地址。你只能这样做:

char * eins = "dogslovecats";
char * zwei = "cats";

stringtausch(&eins, &zwei);

void stringtausch(char ** eins, char ** zwei) {

    char * temp;

    temp = *eins;

    *eins = *zwei;

    *zwei = *temp;
}

如果两个字符串的长度相等

void stringtausch(char *eins, char *zwei) {
    while ((*eins != '[=10=]') && (*zwei != '[=10=]')) {
        char swp;
        swp = *zwei;
        *zwei++ = *eins;
        *eins++ = swp;
    }
    *zwei = '[=10=]';
    *eins = '[=10=]';
}

如果他们不这样做,那是不可能的,除非您在传递指针之前分配足够的 space。我看不出有什么好处,因为你可以

void stringtausch(char **eins, char **zwei) {
    char *swp;

    swp   = *zwei;
    *zwei = *eins;
    *eins = swp;
}

并调用 stringtausch

stringtausch(&s1, &s2);