字符串交换c

时间:2012-08-31 11:22:59

标签: c

    #include<stdio.h>
    void swap(char *, char *);

    int main()
    {
        char *pstr[2] = {"Hello", "IndiaBIX"};
        swap(&pstr[0],&pstr[1]);
        printf("%s\t%s", pstr[0], pstr[1]);
        return 0;
    }
    void swap(char **t1, char **t2)
    {
         char *t;
         t=*t1;
         *t1=*t2;
         *t2=*t;
    }

我不明白为什么不能通过调用这样的函数来交换字符串的指针:

swap(pstr[0],pstr[1]);

我陷入困境,为什么我不应该使用它。有人请帮助我。

感谢..

4 个答案:

答案 0 :(得分:3)

实际上,您主要有两个错误:

  • 在说明*t2 = *t中,*t2是一个字符串,而*t是一个字符;
  • swap的声明与其定义不同。

此外,pstr[0]pstr[1]可以指向只读字符串,因此将它们声明为指向const char的指针被认为是一种很好的做法。

在这种情况下,下面的代码工作正常(它只交换两个指针的值,而不是字符串本身)。

#include <stdio.h>

static void 
swap(const char ** const p, const char ** const q)
{
    const char * const pTmp = *p;
    *p = *q;
    *q = pTmp;
}

int main(void)
{
    const char *p[] = { "Hello", "IndiaBIX" };
    printf("%s - %s\n", p[0], p[1]);
    swap(p, p + 1);
    printf("%s - %s\n", p[0], p[1]);
    return 0;
}

答案 1 :(得分:2)

  

我不明白为什么不能通过调用来交换字符串的指针   这个函数就像这个swap(pstr [0],pstr 1);

因为swap函数需要一个指向的指针,而不是指向char的指针。就是这样,因为它改变了实际的指针,而不是它们的内容。这个C FAQ是相关的。

答案 2 :(得分:0)

首先,函数交换的声明和定义不匹配。了解更多。

答案 3 :(得分:0)

看起来是时候熟悉一个调试器了。如果您使用的是Linux,我可以推荐gdb

使用-g开关使用debug-info编译您的程序。

运行程序:

gdb -q ./a.out

main中设置断点:

b main

使用r命令运行程序。现在,使用n逐步执行代码,并使用p命令查看变量。祝你好运。