#include <stdio.h> void Sort (char *p); int main(void) char str[20], *pstr ; int i; 1分 gets (pstr); Sort (pstr); 1分 return 0; 1 void Sort (char *p) char *pi, *pj, tmp; int i,j,min; for (pi - Is, 1-0; 工分 itt,pi+t) min=i;
时间: 2023-06-20 14:04:27 浏览: 108
<stdioh>常用函数-函数与指针
这段代码存在一些语法错误和逻辑错误,我来帮你指出并解释一下。
1. 在 main 函数中,定义了一个字符数组 str,但是没有给它分配内存空间,应该改为:
```c
char str[20] = {0};
```
2. 在 main 函数中,定义了一个字符指针 pstr,但是没有给它分配内存空间,应该改为:
```c
char *pstr = str;
```
3. 在 Sort 函数中,变量 pi 没有初始化,应该改为:
```c
char *pi = p;
```
4. 在 Sort 函数中,变量 pj 没有初始化,应该改为:
```c
char *pj = p;
```
5. 在 Sort 函数中,变量 tmp 没有初始化,应该改为:
```c
char tmp = 0;
```
6. 在 Sort 函数中,变量 i 和 j 没有初始化,应该改为:
```c
int i = 0, j = 0;
```
7. 在 Sort 函数中,min 变量没有被赋初值,应该改为:
```c
int min = 0;
```
8. 在 Sort 函数中,for 循环中的条件语句错误,应该改为:
```c
for (pi = p; pi < p + strlen(p) - 1; pi++)
```
9. 在 Sort 函数中,for 循环中的比较语句错误,应该改为:
```c
if (*(pi + j) < *(pi + min))
```
10. 在 Sort 函数中,for 循环中的赋值语句错误,应该改为:
```c
tmp = *(pi + min);
*(pi + min) = *(pi + j);
*(pi + j) = tmp;
```
11. 在 main 函数中,调用 Sort 函数时,应该传入字符数组的地址,改为:
```c
Sort(pstr);
```
最终的代码应该如下:
```c
#include <stdio.h>
#include <string.h>
void Sort(char *p);
int main(void) {
char str[20] = {0};
char *pstr = str;
int i;
gets(pstr);
Sort(pstr);
return 0;
}
void Sort(char *p) {
char *pi = p;
char *pj = p;
char tmp = 0;
int i = 0, j = 0, min = 0;
for (pi = p; pi < p + strlen(p) - 1; pi++) {
min = i;
for (pj = pi + 1; pj < p + strlen(p); pj++) {
if (*(pj) < *(pi + min))
min = pj - pi;
}
tmp = *(pi + min);
*(pi + min) = *(pi);
*(pi) = tmp;
}
}
```
阅读全文