2
    #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

4 回答 4

3

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

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

此外,pstr[0]andpstr[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;
}
于 2012-08-31T11:24:47.413 回答
2

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

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

于 2012-08-31T11:24:09.390 回答
0

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

于 2012-08-31T11:25:54.757 回答
0

看来是时候熟悉调试器了。如果你在 linux 上,我可以推荐gdb.

-g使用开关使用调试信息编译您的程序。

运行你的程序:

gdb -q ./a.out

在中设置断点main

b main

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

于 2012-08-31T11:27:17.983 回答