#include<stdio.h> #define N 100 void funprin(char * arr); int main(void) { char arr[N]; gets(arr); funprin(arr); return 0; } void funprin(char * arr) { char *p1 = arr; char *p2 = arr; while(*p1) { p1++; p2++; } p1--; p2--; while(p1!=arr){ while ((*p1>=65 && *p1<=90) || (*p1>=97 && *p1<=122)) { p1--; p2--; } *p1 = '\0'; p2++; if ((*p2>=65 && *p2<=90) || (*p2>=97 && *p2<=122)) { printf("%s ",p2); } p2 = p1; p1--; p2--; } printf("%s ",p1); puts(" "); }当输入aaa aaa a的时候出现段错误
时间: 2024-03-20 22:44:57 浏览: 116
这个代码中的问题在于,当输入的字符串中没有字母时,指针p2会指向字符串的开头,而在程序的最后,使用该指针进行输出时会导致段错误。解决这个问题的方法是在输出之前先判断指针p2是否指向了字符串的开头。可以在while循环中加入一个判断条件,判断p2是否指向了字符串的开头,如果是,则跳出循环,不进行输出。修改后的代码如下:
```c
#include <stdio.h>
#define N 100
void funprin(char *arr);
int main(void)
{
char arr[N];
gets(arr);
funprin(arr);
return 0;
}
void funprin(char *arr)
{
char *p1 = arr;
char *p2 = arr;
while (*p1)
{
p1++;
p2++;
}
p1--;
p2--;
while (p1 != arr)
{
while ((*p1 >= 65 && *p1 <= 90) || (*p1 >= 97 && *p1 <= 122))
{
p1--;
p2--;
}
*p1 = '\0';
p2++;
while (p2 != arr && ((*p2 >= 65 && *p2 <= 90) || (*p2 >= 97 && *p2 <= 122)))
{
p2++;
}
if (p2 != arr)
{
printf("%s ", p2);
}
p2 = p1;
p1--;
p2--;
}
printf("%s ", p1);
puts(" ");
}
```
阅读全文