字符串排序 指针数组的值是NULL
#include "conio.h "
#include "stdio.h "
#include "malloc.h "
#define N 20
main()
{
void sort(char *pstr[N],int num);
char *str[N];
int num,i;
printf( "Input the num: ");
scanf( "%d ",&num);
for(i=0;i <num;i++) /* 输入字符串 */
{printf( "please input the No.%d string: ",i+1);
scanf( "%s ",str[i]);
}
sort(str,num);
getch();
}
void sort(char *pstr[N],int num)
{
int i,j;
char temp[N];
printf( "------------------------------------ ");
for(j=0;j <num;j++) /* 冒泡排序 */
for(i=j;i <num;i++)
{
if( strcmp(*pstr[i] , *pstr[i+1] ) > 0 )
{ strcpy(temp,pstr[i]);
strcpy(pstr[i],pstr[i+1]);
strcpy(pstr[i+1],temp);
}
}
printf( "After sort:\n "); /* 输入排序后的结果 */
for(i=0;i <num;i++)
{
printf( "%s ",pstr[i]);
}
}
[解决办法]
char *str[N];
for(int i=0;i <N;i++)
str[i]=new char[128];
N个指针都没有分配空间
[解决办法]
问题出在你的main函数里面,如下
main()
{
void sort(char *pstr[N],int num);
char *str[N]; //定义了指针数组,但没有为每个指针分配空间
int num,i;
printf( "Input the num: ");
scanf( "%d ",&num);
for(i=0;i <num;i++)
{
str[i]=(char*)malloc(20); //要在这里加上这一句,str[i]才有了空间,下面的
//scanf( "%s ",str[i]);才能成功
printf( "please input the No.%d string: ",i+1);
scanf( "%s ",str[i]);
}
sort(str,num);
getch();
}
并且不要忘了在主函数里面释放空间
for(i=0;i <num;i++)
{
free str[i];
}
[解决办法]
for(j=0;j <num;j++) /* 冒泡排序 */
for(i=j;i <num;i++)
------------------------
内层循环改成for(i=j;i <num-1;i++)
[解决办法]
#include "conio.h "
#include "stdio.h "
#include "malloc.h "
#define N 20
#define SIZE 50
main()
{
void sort(char *pstr[N],int num);
char *str[N];
int num,i;
printf( "Input the num: ");
scanf( "%d ",&num);
for(i=0;i <num;i++) /* 输入字符串 */
{
str[i]=(char *)malloc(sizeof(char)*SIZE)
if(str[i])
{
printf( "please input the No.%d string: ",i+1);
scanf( "%s ",str[i]);
}
else
return -1;/*MEMORY OVERFLOW*/
}
sort(str,num);
getch();
return 0;
}
void sort(char *pstr[N],int num)
{
int i,j;
char temp[N];
printf( "------------------------------------ ");
for(j=0;j <num;++j) /* 冒泡排序 */
for(i=j;i <num-1;++j)
{
if( strcmp(pstr[i] , pstr[i+1] ) > 0 )//去掉*
{
strcpy(temp,pstr[i]);
strcpy(pstr[i],pstr[i+1]);
strcpy(pstr[i+1],temp);
}
}
printf( "After sort:\n "); /* 输入排序后的结果 */
for(i=0;i <num;i++)
{
printf( "%s ",pstr[i]);
}
}
[解决办法]
#include <conio.h>
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>
const int N = 20;
void sort(char* pstr[], int num);
int main(void)
{
char *str[N];
int num,i;
printf( "Input the num: ");
scanf( "%d ", &num);
for(i=0; i <num; i++) /* 输入字符串 */
{
str[i]=(char *)malloc(sizeof(char)*N);
printf( "please input the No.%d string: ", i+1);
scanf( "%s ", str[i]);
}
for(i=0; i <num; i++) /* 显示字符串 */
{
printf( "%s ", str[i]);
}
sort(str, num);
for(i=0; i <num; i++)//修改了
{
free(str[i]);
str[i] = NULL;
}
system( "PAUSE ");
return 0;
}
void sort(char* pstr[], int num)
{
int i,j;
char temp[N] = {0};
printf( "------------------------------------ ");
for(j=0; j <num; j++) /* 冒泡排序 *///修改了
for(i=0; i <num-j-1; i++)
{
if( strcmp(pstr[i], pstr[i+1]) > 0 )//修改了
{
strcpy(temp, pstr[i]);
strcpy(pstr[i], pstr[i+1]);
strcpy(pstr[i+1], temp);
}
}
printf( "After sort:\n "); /* 输入排序后的结果 */
for(i=0; i <num; i++)
{
printf( "%s ", pstr[i]);
}
}
我修改了好几出地方,,,...