c语言 指针数组与scanf

#include
#include

void get(char p[])
{
for (int i = 0; i < 3; i++)
scanf_s("%s",p+i,10);
}
void exchange(char *p[])
{
char *temp;
for (int i = 0; i < 2; i++)
for (int j = i + 1; j < 3; j++)
{
if ((strcmp(p[i], p[j]))>0)
{
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
void put(char *p[])
{
for (int i = 0; i < 3; i++)
{
printf("%s",
(p + i));
printf("\n");
}
}
int main()
{
void get(char *p[]);
void exchange(char *p[]);
void put(char *p[]);
char *p[3];
get(p);
printf("\n");
exchange(p);
put(p);
}

之后总是程序停止工作

get(char *p)

你的指针数组没有分配内存空间。

代码写的好乱。首先函数的申明应该放在main函数外。前面都已申明定义,可以不用再次申明。其次为指针数组p中每一个指针变量p[0],p[1],p[2]赋值时,你没有给它申请空间。当然会报错。

scanf_s("%s",p+i,10);
改为:
scanf("%s",p+i,10);