C语言:写一个函数,输入一行字符,输出其中最长的单词!
以下是我写的程序,原谅我是新手,我觉得自己写得很烦,结果是“0x004011b9指令引用的0x234731b4内存不能为read”.我想知道原因在哪儿?应该怎么写?求高手帮帮我!!!
#include<stdio.h>
void main()
{
void fun(char str[],char word[]);
char str[80],word[20];
scanf("%s",str);
fun(str,word);
printf("%s\n",word);
}
void fun(char str[],char word[])
{
int i,j=0,w=0,k,th,t[10],lenth[10],len=0;
for(i=0;str[i]!='\0';i++)
{
if(str[i]==' ')w=0; //该循环标记各单词的首字母位置
else if(w==0){t[j]=i;j++;} //并使各单词首字母位置与其是第几个单词对应
}
j=0;
for(i=0;str[i]!='\0';i++)
{
len++;
if(str[i]==' ')
{ //该循环计算各单词长度,并把长度值赋于lenth数组
lenth[j]=len-1;
j++;
len=0;}
}
k=lenth[0];
for(i=0;lenth[i]!=0;i++)
if(k<lenth[i])th=i; //求最长的单词,并得出其是第几个单词
for(j=t[th],i=0;str[j]!=' ';j++) //在最长单词的首字母位置处开始循环,把该单词的字母一一存到word数组中
{word[i]=str[j];i++;}
}
[解决办法]
多年来的经验 肯定是数组越界了
呵呵
[解决办法]
只知道这一句有问题:
if(k <lenth[i])th=i; //求最长的单词,并得出其是第几个单词
th未初始化,如果k>=lenth[i]则th的值未确定,后面的j=t[th]就会越界。
[解决办法]
以下是修改后可运行的程序,请注意我加的注释。
#include <stdio.h> void main() { void fun(char str[],char word[]); char str[80],word[20]; gets(str); // scanf("%s",str); scanf只能读1个单词,不能读1行单词 fun(str,word); printf("%s\n",word); } void fun(char str[],char word[]) { int i,j=0,w=0,k,th,t[10],lenth[10],len=0; for(i=0;str[i]!='\0';i++) { if(str[i]==' ') w=0; //该循环标记各单词的首字母位置 else if(w==0) { t[j]=i;j++;//并使各单词首字母位置与其是第几个单词对应 w=1; //如果不置为1,后面循环还要执行上一行 } } j=0; for(i=0;str[i]!='\0';i++) { len++; if(str[i]==' ') //如果有多个空格不能仅这样处理 { //该循环计算各单词长度,并把长度值赋于lenth数组 lenth[j]=len-1; j++; len=0; } } k=lenth[0]; th=0; for(i=0;lenth[i]!=0;i++) if(k <lenth[i])th=i; //求最长的单词,并得出其是第几个单词 for(j=t[th],i=0;str[j]!=' ';j++) //在最长单词的首字母位置处开始循环,把该单词的字母一一存到word数组中 { word[i]=str[j];i++; } word[i]=0; //加结束符}
[解决办法]
楼主 对照下4L的吧 另外 建议楼主对自己的源代码调试运行下 找出出错的地方 下一次才可以避免重复出现这样的错误 呵呵 我这台电脑没安VC不然可以帮你调试下 看看那里出错
另:楼主 春节快乐、大家都春节快乐
[解决办法]
每天回帖即可获得10分可用分!
[解决办法]
看来问题已经解决,大家新年快乐了
[解决办法]
各位新春快乐~
各位新春快乐~
[解决办法]
大哥,你的结贴率为 0%。
[解决办法]
scanf遇空格就结束获取输入值。对于scanf来说,空格和'\0'都相当于结束符。
遇到问题,可以自己调试一下。动手多了,就不会手生了。
[解决办法]
看不懂,你写的啥!!!
[解决办法]
JFJFJFJFJFJFJJFJF
[解决办法]
看来问题已经解决,大家新年快乐了