先认为楼主的需求是:输入3个字符串,然后按字符串的大小进行排序,然后再依次打印字符串。
main函数内修改如下:
[C++] 纯文本查看 复制代码 int n = 3;
int strLen = MAX_STRINGS + 1; //定义一个变量,比字符串的最大长度大1,最后一位用于存放结束符\0
char **a = (char**)malloc(n*sizeof(char*)); //先分配一个用于存放字符串指针的数组
for (size_t i = 0; i < n; i++)
{
*(a + i) = (char*)malloc(strLen*sizeof(char)); //针对每一个字符串单独分配空间
memset(*(a+i), 0, strLen*sizeof(char)); //初始化为0
}
printf("输入三个字符串\n");
for (size_t i = 0; i < n; i++)
{
scanf_s("%s", a[i], MAX_STRINGS); //输入字符串,用scanf_s最好加上长度,不然人家输入21位的字符串,恐怕后面的strcmp和printf都会缓冲区溢出
}
//冒泡法排序,不作解释
for (size_t i = 0; i < n; i++)
{
for (size_t j = 0; j < n-i-1; j++)
{
if (strcmp(a[j],a[j + 1])>0)
{
char* temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
//打印,如果一开始分配内存时不清零,输入时不做长度限制,这里估计会挂
for (size_t i = 0; i < n; i++)
{
printf("%s\n", a[i]);
}
free(a);
return 0;
|