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

无法打印字符数组首元素?输入cat与t仅输出a的问题排查

问题排查与修复

核心错误分析

  1. 循环变量未初始化+错误覆盖数组首元素
    代码里的这段循环是问题根源:

    for(A[i] = 0; A[i] != c; i++) {
        count++;
    }
    
    • 变量i在循环前未初始化,属于未定义行为,初始值是随机的,可能直接修改数组中任意未知位置的元素。
    • 就算i碰巧为0,A[i] = 0也会把原字符串的第一个字符(比如输入"cat"时的'c')覆盖成\0,导致第一个字符直接丢失,这就是你只输出"a"的直接原因。
  2. scanf的不规范写法
    数组名A本身就是指向数组首元素的指针,不需要加取地址符&,scanf("%s", &A);应改为scanf("%s", A);,虽然编译器可能不报错,但这是不符合C语言规范的写法。


修复后的代码

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char A[100];
    char c;
    scanf("%s", A); // 移除多余的&
    while ((getchar()) != '\n');
    scanf("%c", &c);
    int i = 0, count = 0; // 初始化循环变量i
    // 正确遍历数组,同时增加边界判断避免越界
    for(; A[i] != c && A[i] != '\0'; i++) {
        count++;
    }
    for(i = 0; i < count; i++) {
        printf("%c", A[i]);
    }
    return 0;
}

额外说明

修复后的循环增加了A[i] != '\0'的判断,避免目标字符不在字符串中时出现数组越界的情况;循环初始化部分留空是因为已经提前将i初始化为0,也可以写成for(i = 0; A[i] != c && A[i] != '\0'; i++),两种写法效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:50:25