c语言求单词长度(含指针,strtok函数等方法)

文章讲述了如何在C语言中使用scanf、fgets和strtok函数连续读取字符串,以及如何处理逗号分隔。特别强调了scanf的安全性问题和fgets的相对安全性,以及strtok函数在字符串分割中的应用和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

scanf连续读取字符串

注意逗号处理,除第一个单词以外,每个单词前都有逗号

#include <stdio.h>
#include <string.h>

int main() {
    char s[100];
    int flag = 1; // 使用 1 表示第一个单词
    while (scanf("%s", s) == 1) {
        if (flag) {
            flag = 0;
            printf("%lu", strlen(s));
        } else {
            printf(",%lu", strlen(s));
        }
    }
    return 0;
}

该题还可以读入一整行后做处理

读取一整行

可选用函数有fgets,gets,和scanf("%[^\n]",s)三种

scanf("%[^\n]", str) 和 gets(str) 都可以用来读取一行字符串,但它们之间有以下区别:

安全性:scanf 函数在处理字符串时存在潜在的缓冲区溢出问题,因为它没有指定最大输入长度。如果输入的字符串超过了目标数组的大小,就会导致缓冲区溢出。而 gets 函数更不安全,因为它没有提供字符数目的限制,可能导致更严重的内存溢出问题。而fgets最安全但会读取末尾的换行符,造成最后一个数字在编译器上测试时可能会大1,而在洛谷ide交题无碍。

指针

#include <
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值