这是一个输入一些字符串,然后用 strcmp()比较字符串大小,并按从小到大的顺序输出它们的程序,有截图

#include<stdio.h>#include<string.h>#include<stdlib.h>#defineyibai100intmain(void){cha... #include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define yibai 100
int main(void)
{
char**q1=NULL;
char**q2=NULL;
int capalcity=10;
char buf[yibai];
int length=0;
int count=0;
q1=(char**)calloc(capalcity,sizeof(char*));
while(1)
{
if(!fgets(buf,yibai,stdin))
{
printf("error entering");
return 1;
}
if(count=capalcity)
{
capalcity+=10;
q2=(char**)realloc(q1,capalcity);
q1=q2;
}
length=strnlen_s(buf,100)+1;
*(q1+count)=(char*)malloc(length);
strcpy_s(*(q1+count),length,buf);
count++;
if(buf[0]=='\n')
break;
}
int a=count;
char*p1=NULL;
while(count!=1)
{
for(int i=0;i<a-1;i++)
{
if(strcmp(*(q1+i),*(q1+i+1))>0);
{
p1=*(q1+i);
*(q1+i)=*(q1+i+1);
*(q1+i+1)=p1;
}
}
count--;
}
for(int i=0;i<a;i++)
{
printf("\n%s",*(q1+i));
free(*(q1+i));
*(q1+i)=NULL;

}
free(q1);
q1=NULL;

}

求大神告诉我问题处在那??
展开
 我来答
kaixingui2012
2014-04-14 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6489万
展开全部
你结贴好快,我下边用普通的C语言编译器调了一下,但结果不是很理想,应该还有问题,但不会死掉了
#define yibai 100
int main(void)
{
        char**q1=NULL;
        char**q2=NULL;
        int capalcity=10;
        char buf[yibai];
        int length=0;
        int count=0;
        q1=(char**)calloc(capalcity,sizeof(char*));
        while(1)
        {
                if(!fgets(buf,yibai,stdin))
                {
                        printf("error entering");
                        return 1;
                }
                if(buf[0]=='\n')
                        break;
                if(count==capalcity)
                {
                        capalcity+=10;
                        q2=(char**)realloc(q1,capalcity);
                        q1=q2;
                }
                length=strlen(buf)+1;
                *(q1+count)=(char*)malloc(length+1);  //-----
                strcpy(*(q1+count),buf);
                count++;
        }
        int a=count;
        char*p1=NULL;
            int i;
        while(count!=1)
        {
                for( i=0;i<a-1;i++)
                {
                        if(strcmp(*(q1+i),*(q1+i+1))>0)   //---
{ //--------
                        p1=*(q1+i);
                        *(q1+i)=*(q1+i+1);
                        *(q1+i+1)=p1;
} //------
                }
                count--;
        }
        for( i=0;i<a;i++)
        {
                printf("%s",*(q1+i));
                free(*(q1+i));
        }
        free(q1);
return 0;
} //修改的地方加了注释,请自行研究一下原因,不懂再问

里面strcpy strlen我作了修改,你可以按MS的要求调整一下,我没有环境,不方便调试

追问
呵呵,多谢你的耐心,我已经发现了,是:
if(strcmp(*(q1+i),*(q1+i+1))>0);
{p1=*(q1+i);
*(q1+i)=*(q1+i+1);
*(q1+i+1)=p1;}

这里应该是这样的,我已经改好了,然后就可以运行
追答
祝你进步!good lucky
xoaxa
推荐于2016-04-16 · TA获得超过8611个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3498万
展开全部
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define yibai 100
int main(void) {
char **q1 = NULL;
char **q2 = NULL;
int capalcity = 10;
char buf[yibai];
int length = 0;
int i,count = 0;
q1 = (char **)calloc(capalcity,sizeof(char *));
while(1) {
if(!fgets(buf,yibai,stdin)) {
printf("error entering\n");
return 1;
}
if(count == capalcity) { // == 还是 =
capalcity += 10;
q2 = (char **)realloc(q1,capalcity);
q1 = q2;
}
length = strlen(buf) + 1;
*(q1 + count) = (char *)malloc(length);
strcpy(*(q1 + count),buf);
count++;
if(buf[0] == '\n') break;
}
int a = count;
char*p1 = NULL;
while(count != 1) {
for(i = 0;i < a - 1;i++) {
if(strcmp(*(q1 + i),*(q1 + i + 1)) > 0) { // ;
p1 = *(q1 + i);
*(q1 + i) = *(q1 + i + 1);
*(q1 + i + 1) = p1;
}
}
count--;
}
for(i = 0;i < a;i++) {
printf("\n%s",*(q1 + i));
free(*(q1 + i));
*(q1 + i) = NULL;
}
free(q1);
q1 = NULL;
return 0;
}

 两处低级错误,看有注释的行。

追问
谢谢你,是第二处的错误
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式