criedjoker 2015-07-08 08:00 采纳率: 80%
浏览 1547
已采纳

哪位大神帮我看看代码有什么问题

程序运行后,输入字符串没反应,小弟刚学C语言,先谢谢各位大神了。
代码如下:
#include
#include
#include
#define BUF_LEN 100
#define INIT_STR_EXT 50
#define WORDS_INCR 5
int main(void)
{
char delimiters[]=" \n\".,;:!?)(";
char buf[BUF_LEN];
size_t str_size=INIT_STR_EXT;
char* pStr=(char*)malloc(str_size);
pStr='\0';
printf("Enter some prose with up to %d characters per line.\nTerminate input by entering an empty line:\n",BUF_LEN);
while(true)
{
fgets(buf,BUF_LEN,stdin);
if(buf[0]=='\n')
break;
if(strlen(pStr)+strlen(buf)+1>str_size)
{
str_size=strlen(pStr)+strlen(buf)+1;
pStr=(char
)realloc(pStr,str_size);
}
strcat(pStr,buf);

}
size_t maxWords=10;
int word_count=0;
size_t word_length=0;
char** pWords=(char**)calloc(maxWords,sizeof(char*));
int* pnWord=(int*)calloc(maxWords,sizeof(int));
char* pWord=strtok(pStr,delimiters);
if(!pWord)
{
printf("No words found.Ending programe.\n");
return 1;
}
bool new_word=true;
while(pWord)
{
for(int i=0;i<word_count;++i)
{
if(strcmp(*(pWords+i),pWord)==0)
{
++*(pnWord+i);
new_word=false;
break;
}
}
}
if(new_word)
{
if(word_count==maxWords)
{
maxWords+=WORDS_INCR;
pWords=(char**)realloc(pWords,maxWords*sizeof(char*));
pnWord=(int*)realloc(pnWord,maxWords*sizeof(int));
}
word_length=strlen(pWord)+1;
(pWords+word_count)=(char)malloc(word_length);
strcpy(*(pWords+word_count),pWord);
*(pnWord+word_count++)=1;
}
else
new_word=true;
pWord=strtok(NULL,delimiters);

for(int i=0;i<word_count;++i)
{
printf("%-13s %3d",*(pWords+i),*(pnWord+i));
if((i+1)%4==0)
printf("\n");
}
printf("\n");
for(int k=0;k<word_count;++k)
{
free(*(pWords+k));
*(pWords+k)=NULL;
}

free(pWords);
pWords=NULL;
free(pnWord);
pnWord=NULL;
free(pStr);
pStr=NULL;
return 0;
}

  • 写回答

2条回答 默认 最新

  • abc_def_ghj 2015-07-08 08:17
    关注

    请看问题1和问题2的修改。由于不知道你的功能,只能根据编译错误进行修改
    char* pStr=(char*)malloc(str_size);
    pStr='\0'; //这里赋空会导致strlen(pStr)为空指针
    printf("Enter some prose with up to %d characters per line.\nTerminate input by entering an empty line:\n",BUF_LEN);
    while(true)
    {
    fgets(buf,BUF_LEN,stdin);
    if(buf[0]=='\n')
    break;
    if(strlen(pStr)+strlen(buf)+1>str_size)
    {
    str_size=strlen(pStr)+strlen(buf)+1;
    pStr=(char*)realloc(pStr,str_size); //问题1
    }
    strcat(pStr,buf);
    }
    size_t maxWords=10;
    int word_count=0;
    size_t word_length=0;
    char** pWords=(char**)calloc(maxWords,sizeof(char*));
    int* pnWord=(int*)calloc(maxWords,sizeof(int));
    char* pWord=strtok(pStr,delimiters);
    if(!pWord)
    {
    printf("No words found.Ending programe.\n");
    return 1;
    }
    bool new_word=true;
    while(pWord)
    {
    for(int i=0;i<word_count;++i)
    {
    if(strcmp(*(pWords+i),pWord)==0)
    {
    ++*(pnWord+i);
    new_word=false;
    break;
    }
    }
    }
    if(new_word)
    {
    if(word_count==maxWords)
    {
    maxWords+=WORDS_INCR;
    pWords=(char**)realloc(pWords,maxWords*sizeof(char*));
    pnWord=(int*)realloc(pnWord,maxWords*sizeof(int));
    }
    word_length=strlen(pWord)+1;

        *(pWords+word_count) = (char*)malloc(word_length); //问题2
        strcpy(*(pWords+word_count),pWord);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化