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

C语言中如何使用scanf()获取输入的char数组(%s)的长度

问题解决方法

问题根因

你遇到的输出长度固定为1的问题,由两个核心错误导致:

  • 数组初始化不符合需求:char chr[] = "" 等价于声明了长度为1的char数组,仅能存储字符串结束符\0,直接用scanf("%s", chr)写入输入内容会触发缓冲区溢出,属于未定义行为,可能导致程序崩溃、数据篡改等异常。
  • 长度计算方式错误:sizeof运算符的作用是统计变量本身占用的内存字节数,你的chr数组初始化时长度就固定为1,因此无论输入什么内容,sizeof(chr)的返回值永远是1,无法统计输入字符串的实际有效长度。

正确实现步骤

  1. 给存储输入的char数组分配足够大的固定长度,同时使用scanf时增加长度限制,规避缓冲区溢出风险。
  2. 引入标准库<string.h>,使用库函数strlen()计算输入字符串的有效长度:该函数会从字符串首地址开始逐字符统计,直到遇到结束符\0为止,返回的长度不包含\0本身。

修正后完整代码

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

// 定义缓冲区最大长度,可根据实际输入场景调整大小
#define BUFFER_LENGTH 1024
char chr[BUFFER_LENGTH] = {0};
int n;

// 标准C规范要求main函数返回值为int类型
int main()
{
    printf("\n");
    printf("Enter a character: ");
    // 限制输入长度不超过BUFFER_LENGTH-1,预留1位存储字符串结束符
    scanf("%1023s", chr);
    printf("You entered %s.", chr);
    printf("\n");

    n = strlen(chr);
    printf("length n = %d \n", n);
    printf("\n");

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:54:01