字符串交换程序错误分析及修改 - 2012电子科大复试C1

需积分: 0 0 下载量 145 浏览量 更新于2024-01-31 收藏 56KB DOCX 举报
在上面的程序段中,有两处错误。首先是函数swap的错误。函数声明为void swap(char* pa, char* pb),目的是交换两个字符串的内容。然而,在函数体内部,指针temp没有指向一个确定的内存单元,因此交换操作无效。此外,在交换前,临时保存字符串内容的temp变量的赋值操作也是多余的。要修正这个错误,可以声明一个临时字符数组来实现字符串内容的交换。 修正后的代码如下: ```c void swap(char* pa, char* pb) { char temp[101]; // 声明一个临时字符数组来保存字符串内容 strcpy(temp, pa); // 将pa的内容拷贝到temp中 strcpy(pa, pb); // 将pb的内容拷贝到pa中 strcpy(pb, temp); // 将temp的内容拷贝到pb中 } ``` 接下来是函数change的错误。函数声明为void change(char* p1, char* p2),目的是交换两个字符指针所指向的字符串。然而,在函数体内部,指针temp的赋值操作和指针p1、p2的交换操作是无效的,因为指针变量之间的赋值只是改变了指针本身的指向,并不会改变指针所指向的内存内容。为了修正这个错误,可以使用指针的间接操作符*来交换指针所指向的字符。 修正后的代码如下: ```c void change(char* p1, char* p2) { char* temp; // 声明一个临时指针 char str[101]; // 编译器会给str开辟内存的 temp = p1; // 将p1的值赋给temp p1 = p2; // 将p2的值赋给p1 p2 = temp; // 将temp的值赋给p2 // 使用指针的间接操作符*来交换指针所指向的字符 strcpy(str, p1); // 将p1指向的字符串拷贝到str中 strcpy(p1, p2); // 将p2指向的字符串拷贝到p1中 strcpy(p2, str); // 将str中的字符串拷贝到p2中 } ``` 以上是对程序段中错误的分析和修改,经过修正后,swap函数和change函数可以正确地交换两个字符串的内容和字符指针所指向的字符串。这样,程序能够正常运行,并达到预期的交换效果。