You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言字符串长度问题:scanf读取不完整致函数仅获首个单词长度

问题:读取带空格字符串时仅获取首个单词的长度

主代码片段

printf("enter a string: ");
scanf("%s",C); // 预期输入 "Hello world this is a string"

printf("%d\n",strlen(C));

temp=com0(C);

这段代码运行后,strlen(C)输出5(仅为"Hello"的长度),传入com0函数后,函数内的strlen(k)同样输出5,无法获取完整字符串的长度。

com0函数代码

bool com0(char k[]){
    printf("%d\n",strlen(k));
    if(k[0]>='a' && k[0] <= 'z'){
        return com1(nextchar(k+1));
    }
    else{
        return false;
    }
}

问题原因

scanf("%s")的%s格式符只会读取连续的非空白字符,遇到空格、换行或制表符就会停止读取,所以变量C中只存储了第一个空格前的"Hello",后续内容根本没被读入。

解决方案

用fgets替代scanf来读取包含空格的完整字符串:

printf("enter a string: ");
// 假设C是足够大的字符数组,比如char C[100];
fgets(C, sizeof(C), stdin);

// 可选:移除fgets读取到的换行符(如果存在)
size_t str_len = strlen(C);
if (str_len > 0 && C[str_len - 1] == '\n') {
    C[str_len - 1] = '\0';
}

printf("%d\n",strlen(C));
temp=com0(C);

fgets会读取直到换行符或缓冲区满的所有字符(包括空格),这样就能获取完整的输入字符串,strlen和com0函数也能得到正确的总长度。

内容的提问来源于stack exchange,提问作者Houssam Eddine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:15:36