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

为何无大小限制的char数组调用strlen()返回错误值?

C语言中strlen返回异常值的原因与解决办法

你遇到的问题是:代码里char br[]={'k','l'}对应的strlen(br)返回7(注释部分代码后变成3),但预期结果是2。下面直接说原因和解决办法:

原因分析

  • strlen的工作逻辑很简单:从传入的内存地址开始逐个读字节,直到碰到**空字符\0**才停止,返回的是\0之前的字符总数。它不管数组实际大小,只认\0这个终止符。
  • 你用{'k','l'}初始化数组时,只会把两个字符存入数组,不会自动添加\0。数组br的大小是2,刚好装下两个字符,后面没有多余空间放终止符。
  • 这时候strlen(br)会越界访问数组之外的内存,直到在某个随机位置碰到\0才停下。返回的数字完全取决于栈内存里的随机数据,这在C语言里叫未定义行为——栈内存布局变了(比如注释掉上面的代码),结果就会跟着变,本质都是越界访问导致的随机结果。

对比代码里的char b[7]={'a','b','c','d','e'}:这个数组声明了大小7,只初始化了5个字符,剩下的2个位置会被C语言自动填充为\0,所以strlen(b)能正确返回5,因为它在第6个位置就碰到了终止符。

解决办法

只要让br数组末尾存在\0就行,三种常用方式:

  1. 手动在初始化列表加\0
char br[]={'k','l','\0'};

数组大小会自动变成3,最后一个元素是\0,strlen会正确返回2。

  1. 用字符串字面量初始化
    这是最常用的方式,字符串字面量会自动在末尾追加\0:
char br[]="kl";

数组大小同样是3,包含'k'、'l'和\0,strlen返回2。

  1. 手动给数组末尾赋值\0
    如果已经声明了数组,确保数组有足够空间的话,可以手动设置:
char br[3]={'k','l'};
br[2] = '\0';

注意数组要声明足够大(至少3),不然会触发新的越界问题。


附你的测试代码:

#include<stdio.h>
#include<string.h>
int main(){
  int a[]={1,2,3,4};
  int size= sizeof(a)/sizeof(int);
  printf("\nSize/capacity of integer type array(with no limit) %d\n",size);

  int a1[6]={1,2,3,4};
  int size1= sizeof(a1)/sizeof(int);
  printf("\nSize/capacity of integer type array(with a limit of 7) %d\n",size1);

printf("\n");

  char b[7]={'a','b','c','d','e'};
  int size2= sizeof(b)/sizeof(char);
  int length=strlen(b);
  printf("\nSize/capacity of char type array(with a limit of 7) %d\n",size2);
  printf("\nNumber of char type data in the array %d\n",length);

  char br[]={'k','l'};
  int size3= sizeof(br)/sizeof(char);
  int length1=strlen(br);
  printf("\nSize/capacity of char type array(with no limit) %d\n",size3);
  printf("\nNumber of char type data in the array length1 %d\n",length1);    //answer should have been 2

 return 0;
}

测试输出:

Size/capacity of integer type array(with no limit) 4
Size/capacity of integer type array(with a limit of 7) 6
Size/capacity of char type array(with a limit of 7) 7
Number of char type data in the array 5
Size/capacity of char type array(with no limit) 2
Number of char type data in the array length1 7

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:29:56