c语言题目,定义字符串指针数组,输入字符串并升序排列,请问这个错在哪里了

2025-05-19 23:47:55
推荐回答(2个)
回答1:

错得远了点。char *a[100];是声明了100个cahr *型指针的数组,即每个元素是一个char *型指针。可是后面的for循环用a[i]=e;使所有元素(指针)都指向了同一个字符串的首地址e,这有什么意义?你是不是理解成char *型指针可以存放字符串?那是大错——指针只能“指向”字符串首址而不能存放字符串!

回答2:

手上没有你用的编译器,用vs改了一下

#define _CRT_SECURE_NO_WARNINGS
#include 
#include 

int i;
void paixu(char *b[]);
int main()
{
char *a[100];
int j;
char e[10];

printf("请输入字符串个数:\n");
scanf("%d", &i);

printf("请依次输入字符串:\n");
for (j = 0; j <= i - 1; j++)
{
scanf("%s", e);
a[j] = new char[strlen(e) + 1];
strcpy(a[j], e);
}
paixu(a);

for (j = 0; j <= i - 1; j++)
{
delete a[j];
}
return 0;
}

void paixu(char *b[])
{
int k, l;
char *p;

for (k = 0; k <= i - 1; k++)
{
for (l = k; l <= i - 1; l++)
{
if (strcmp(b[k], b[l]) >= 0)
{
p = b[k];
b[k] = b[l];
b[l] = p;
}
}
}
printf("升级排列后的结果为:\n");
for (k = 0; k <= i - 1; k++)
printf("%s\t", b[k]);
}