#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
命令查看变量。祝你好运。