首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-03-19 
字符串排序指针数组的值是NULL#includeconio.h #includestdio.h #includemalloc.h #defineN20main()

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

}


}


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

热点排行