字符串交换在 C 中

  • 本文关键字:交换 字符串 c
  • 更新时间 :
  • 英文 :

    #include<stdio.h>
    void swap(char *, char *);
    int main()
    {
        char *pstr[2] = {"Hello", "IndiaBIX"};
        swap(&pstr[0],&pstr[1]);
        printf("%st%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]);

进退两难,为什么我不应该使用它。有人请帮助我。

谢谢。。

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

  • 在指令*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 - %sn", p[0], p[1]);
    swap(p, p + 1);
    printf("%s - %sn", p[0], p[1]);
    return 0;
}

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

因为 swap 函数需要指向指针的指针,而不是指向字符的指针。之所以这样,是因为它更改了实际的指针,而不是它们的内容。此 C 常见问题解答是相关的。

首先,函数交换的声明和定义不匹配。看看它。

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

使用

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

运行程序:

gdb -q ./a.out

main中设置断点:

b main

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

最新更新