读书人

字符串排序 指针数组的值是NULL解决方

发布时间: 2012-03-19 22:03:05 作者: rapoo

字符串排序 指针数组的值是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]);

}


}


我修改了好几出地方,,,...

读书人网 >C语言

热点推荐