c - C中的字符串交换

标签 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]);

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

谢谢..

最佳答案

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

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

此外,pstr[0]pstr[1]可以是指向只读字符串的指针,因此将它们声明为指向const char的指针code> 被认为是一个好的实践。

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

#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;
}

关于c - C中的字符串交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12214309/

相关文章:

c - 是否有一个 c 函数可以获取 put as * 中的密码并存储原始值

java - 如何使用JNA在java代码中使用dll文件?

c - 具有不同返回类型的函数指针 C

Python - 使用 os.popen() 解析 Unix "ls"- 杀死子进程的问题

c++ - 如何从进程内部确定 CPU 和内存消耗

c - 为什么%c前面需要加空格?

c - 链接器在节中添加额外的填充?

c - 为 linux 内核的简单 hello world 模块生成 .ko 文件时出错

我可以使用 libfreeradius 制作自己的 Radius 服务器吗?

c - 通过fd获取目录路径