谁能帮我解答下面的问题,给100分。
#include "stdio.h"
#include "string.h"
#define IN 1
#define OUT 0
/*EOF:用CTRL+Z输入*/
main()
{
int state;
int c;/*保存取到的每一个字符*/
char *str;/*以字符串的形式保存每一个单词*/
state = OUT;/*在单词以外*/
str = "";
while((c = getchar()) != EOF)
{
if((c != ' ') && (c != '\n') && (c != '\t'))
{
*str = c;/*将输入拷贝到一个字符串*/
str++;
state = IN;
}
else if(state == IN)
{
state = OUT;
*str = '\n';/*在每个单词后面加上换行符*/
str++;
}
}
printf("\noutput word is %s\n",str);/*按行输出单词*/
}
请教上面的程序有什么BUG?谢谢!
问题点数:100、回复次数:7Top
1 楼Lchaos(nicky)回复于 2002-02-09 16:25:47 得分 15
you forget to alloc space for string str.Top
2 楼dongyingtao(dongyingtao)回复于 2002-02-09 16:25:58 得分 40
首先,你存放字符串的缓冲区没有分配空间,还有输入后str指向最后,你已经遗失了支付串的开始位置。改正如下:
#include "stdio.h"
#include "string.h"
#include <stdlib.h>
#define IN 1
#define OUT 0
/*EOF:用CTRL+Z输入*/
main()
{
int state;
int c;/*保存取到的每一个字符*/
char *str;/*以字符串的形式保存每一个单词*/
char *head;
state = OUT;/*在单词以外*/
str = (char*)malloc(256);
head=str;
memset(str,0,256);
while((c = getchar()) != EOF)
{
if((c != ' ') && (c != '\n') && (c != '\t'))
{
*str = c;/*将输入拷贝到一个字符串*/
str++;
state = IN;
}
else if(state == IN)
{
state = OUT;
*str = '\n';/*在每个单词后面加上换行符*/
str++;
}
}
printf("\noutput word is %s\n",head);/*按行输出单词*/
}
Top
3 楼mountlin(我想睡觉了,下次再改昵称)回复于 2002-02-09 16:28:27 得分 30
两个明显错误:str没有分配空间,printf时str没有移到缓冲首,更正:
main()
{
int state;
int c;/*保存取到的每一个字符*/
char buf[4096];
char *str=buf;/*以字符串的形式保存每一个单词*/
...
str=buf;
printf("\noutput word is %s\n",str);/*按行输出单词*/
}
Top
4 楼Lchaos(nicky)回复于 2002-02-09 16:29:58 得分 15
you can:
add an integer to count the number of characters,
first to alloc a certain size space for str, if the character count
is over that number, then realloc the buffer for str.Top
5 楼gprs_mac(事如春梦了无痕)回复于 2002-02-20 18:33:19 得分 0
我已经为STR置初值了啊,为什么还要分配内存?Top
6 楼gprs_mac(事如春梦了无痕)回复于 2002-02-20 18:50:58 得分 0
已经解决,谢谢以上各位!Top
7 楼gprs_mac(事如春梦了无痕)回复于 2002-02-20 18:51:01 得分 0
已经解决,谢谢以上各位!Top




