2 qq 29120723 qq_29120723 于 2015.07.08 16:00 提问

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

程序运行后,输入字符串没反应,小弟刚学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个回答

dfj12345
dfj12345   2015.07.08 16: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);
qq_29120723
qq_29120723 刚刚才想通,是while循环后的大括号没放对。。
2 年多之前 回复
caozhy
caozhy   Ds   Rxr 2015.07.08 16:08

代码太长了,说下你遇到的问题,程序报错还是结果有问题呢?

qq_29120723
qq_29120723 刚刚想通了!while循环的大括号没放对位置,因为只能采纳一个,我还是采纳那位码字多的兄弟了。还是谢谢你了
2 年多之前 回复
qq_29120723
qq_29120723 就是程序没有报错可以运行,输入字符串以后。光标就停在那不动了。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片