#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]);
我陷入困境,为什么我不应该使用它。有人请帮助我。
感谢..
答案 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
命令查看变量。祝你好运。