criedjoker 2015-07-09 08:25 采纳率: 80%
浏览 1640
已采纳

新人求助,c语言问题。

程序的功能是输入字符串存入pS指针,进行大小对比后按从小到大输出。发现当输入字符串超过5个时程序会停止运行,恳请哪位大神帮我看下代码有什么问题。
代码如下:
#include
#include
#include
#define BUF_LEN 100
#define COUNT 5
int main(void)
{
char buf[BUF_LEN];
size_t str_count=0;
size_t capacity=COUNT;
char pS=(char)calloc(capacity,sizeof(char*));
char** psTemp=NULL;
char* pTemp=NULL;
size_t str_len=0;
bool sorted=false;
printf("Enter strings to be sorted,one per line.Press Enter to end:\n");
char ptr=NULL;
while(true)
{
ptr=fgets(buf,BUF_LEN,stdin);
if(!ptr)
{
printf("Error reading string.\n");
free(pS);
pS=NULL;
return 1;
}
if(*ptr=='\n') break;
if(str_count==capacity)
{
capacity+=capacity/4;
if(!(psTemp=(char
*)realloc(pS,capacity))) return 1;
pS=psTemp;
}
str_len=strlen(buf)+1;
if(!(pS[str_count]=(char*)malloc(str_len))) return 2;
strcpy(pS[str_count++],buf);
}
while(!sorted)
{
sorted=true;
for(size_t i=0;i {
if(i==(str_count-1))
break;
if(strcmp(pS[i],pS[i+1])>0)
{
sorted=false;
pTemp=pS[i];
pS[i]=pS[i+1];
pS[i+1]=pTemp;
}
}
}
printf("Your input sorted in ascending sequence is:\n\n");
for(size_t k=0;k<str_count;++k)
{
printf("%s",pS[k]);
free(pS[k]);
pS[k]=NULL;
}
free(pS);
pS=NULL;
return 0;
}

  • 写回答

2条回答 默认 最新

  • 91program 博客专家认证 2015-07-09 09:01
    关注

    如果实在搞不懂 realloc 是如何运行的,但又担心是它引起的错误,可以考虑自己用 calloc 代替:申请一块大的空间,将以前空间中的数据复制到新申请的空间中,再释放以前的空间。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 C# P/Invoke的效率问题
  • ¥20 thinkphp适配人大金仓问题
  • ¥20 Oracle替换.dbf文件后无法连接,如何解决?(相关搜索:数据库|死循环)
  • ¥15 数据库数据成问号了,前台查询正常,数据库查询是?号
  • ¥15 算法使用了tf-idf,用手肘图确定k值确定不了,第四轮廓系数又太小才有0.006088746097507285,如何解决?(相关搜索:数据处理)
  • ¥15 彩灯控制电路,会的加我QQ1482956179
  • ¥200 相机拍直接转存到电脑上 立拍立穿无线局域网传
  • ¥15 (关键词-电路设计)
  • ¥15 如何解决MIPS计算是否溢出
  • ¥15 vue中我代理了iframe,iframe却走的是路由,没有显示该显示的网站,这个该如何处理