使用strlen()函数返回的长度错误的总结

发布时间:2026-05-07 21:02

生活反思:过去的错误与成长的经验总结。 #生活乐趣# #生活分享# #个人生活感悟# #个人生活反思#

今天 学习 希尔排序时,发现使用strlen() 函数 返回的长度不正确,然后开始分析错误原因。

代码 如下

int main()

{

char a[]={28,13,72,85,39,41,6,20};

int len =strlen(a);//设置断点

for(int j=0;j<8;j++)

printf("%d ",a[j]);

cout<<endl;

//int len=strlen(a);

ShellSort(a,8);

for(int j=0;j<8;j++)

printf("%d ",a[j]);

cout<<endl;

return 0;

}

html

发现len的值并非8

然后我就进行测试


根据360百科

//

strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个'\0',如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到'\0'停止。

char aa[10];cout<<strlen(aa)<<endl; //结果是不定的

char aa[10]={'\0'}; cout<<strlen(aa)<<endl; //结果为0

char aa[10]="jun"; cout<<strlen(aa)<<endl; //结果为3(此处不完全正确,结果可能是不定的,如果编译器将其他的非零字符串放在aa[10]的内存地址后,strlen结果还是不定的,MSP430在IAR编译测试过)(但是在 vc6 中结果为3,编译器会在"处自动添上\0。

//

我得出一个猜想,strlen(a),当a并非字符串数组时,编译有可能出错(不会自动在末尾加上\0)。

所以应该在末尾加上'\0',这样才能得到字符串实际的长度。


最后我去掉测试的代码。

cpp

运行

#include<iostream> #include<cstring> #include<cstdio> using namespace std; void ShellSort(char a[]) { int len=strlen(a); int s=len/2; char temp; for(int i=s;i>0;i=i/2) { for(int j=i;j<len;j++) { temp=a[j]; int k=j-i; if(a[k]>a[j]) { a[j]=a[k]; a[k]=temp; } } } } int main() { char a[]={28,13,72,85,39,41,6,20,'\0'}; int len =strlen(a); for(int j=0;j<8;j++) printf("%d ",a[j]); cout<<endl; ShellSort(a); for(int j=0;j<8;j++) printf("%d ",a[j]); cout<<endl; return 0; }

成功运行!


总结:有些时候偷懒不是什么好事。

网址:使用strlen()函数返回的长度错误的总结 https://www.yuejiaxmz.com/news/view/1456188

相关内容

sum函数的使用方法及实例 sum函数的使用方法
【使用Hash表实现英文单词表并实现单词查询操作:给定单词查询其英文翻译:(1)构造用于存放英文单词表的散列表结构:定义Hash函数;使用开散列法处理冲突;(2)英文单词表在附件文】
vba 编译错误?缺少:=??VBA函数需不需要括号
index match函数的使用方法
pos函数的使用
【数据分析】15组Excel函数,解决数据分析中80%的难题!
EXCEL函数LookUp, VLOOKUP,HLOOKUP应用详解(含中文参数解释)
【C++ 函数设计的艺术】深挖 C++ 函数参数的选择 智能指针与 std::optional:最佳实践与陷阱
毕设拯救计划(一)基于FreeRTOS的智能家居(STM32+Onenet云)
效率工具:数据分析中常见的Excel函数都在这里了

随便看看