C语言实现计算字符串中最后一个单词长度,单词以空格隔开

计算字符串中最后一个单词长度,单词以空格隔开数组

//计算字符串最后一个单词的长度,单词以空格隔开。
#include<stdio.h>
#include<string.h>

int main()
{
    char str[5000];
    gets(str);
    int count=0;
    int len=strlen(str);
    for(int i=(len-1);i>=0;i--)
    {
        if(str[i]!=' ')
        {
            count++;
        }
        else
        {
            break;
        }    
    }
    printf("%d\n",count); return 0;
}

此代码虽然能运行,可是此函数有一个bug,gets函数:没有指定输入字符的大小,限制输入缓冲区的大小,若是输入的字符大于定义的数组长度,会发生内存越界,堆栈溢出。后果很是怕怕函数

 

修改代码以下:spa

//计算字符串最后一个单词的长度,单词以空格隔开。
#include<stdio.h>
#include<string.h>

int main()
{
    char str[5000];
    fgets(str,5000,stdin);
    int count=0;
    int len=strlen(str);
    for(int i=(len-2);i>=0;i--)
    {
        if(str[i]!=' ')
        {
            count++;
        }
        else
        {
            break;
        }    
    }
    printf("%d\n",count);     
    
    return 0;
}

fgets函数会指定大小,若是超出数组大小,会自动根据定义数组的长度截断。code

还有一点,上面代码中标红部分blog

 for(int i=(len-2);i>=0;i--) 

为何i = (len -2)内存

由于fgets函数自己会把回车换行符存入了字符串里。因此实际读入的字符串会多一个回车换行符,故字符串

i=(len-2)
相关文章
相关标签/搜索