C语言,C++问题,字符串求长的strlen函数;
#include"stdio.h"#include"string.h"voidmain(){charc[]={'a','b','c'};printf("%d\n",str...
#include"stdio.h"
#include"string.h"
void main()
{
char c[]={'a','b','c'};
printf("%d\n",strlen(c));
}
怎么输出是7啊,加将c[]换成c[7]或者加上'\0'又对了,strlen函数是遇到'\0'终止,但是c[7]={'a','b','c'};同样没有'/0',但是求长是正确的,我记得系统会默认加上'\0'的,例如c[7]={'a','b','c'};系统实际上存的是'a','b','c','\0','\0','\0','\0'。
高手帮忙看下为什么strlen求错了,这种问题该怎么避免?
最佳答案:
问题出在:char p[]={'a','b','c'},p[]你没指定长度,系统就不知道,默认也为无限长(可以验证:你输入p[16]都还可以看到有输出,因为你没指定p[16],所以这个输出是系统随机给的),这时你调用strlen函数来求“长度未知”的字符串,strlen“很聪明”,它就会给你输出一个奇怪的7(但不一定只是7,你换个其他长度的字符串它又可能输出其他数了)
而且:char p[]这种形式下系统是不会在结尾默认加上'\0'的!。只有在指定长度char p[5]={'a','b','c'}或者字符串形式char p[]="abc"的情况下系统才会在末尾默认加上'\0',这时就不会出错。
我指的“系统”是指VC,在Turbo C下运行char p[]={'a','b','c'}就没问题!! 展开
#include"string.h"
void main()
{
char c[]={'a','b','c'};
printf("%d\n",strlen(c));
}
怎么输出是7啊,加将c[]换成c[7]或者加上'\0'又对了,strlen函数是遇到'\0'终止,但是c[7]={'a','b','c'};同样没有'/0',但是求长是正确的,我记得系统会默认加上'\0'的,例如c[7]={'a','b','c'};系统实际上存的是'a','b','c','\0','\0','\0','\0'。
高手帮忙看下为什么strlen求错了,这种问题该怎么避免?
最佳答案:
问题出在:char p[]={'a','b','c'},p[]你没指定长度,系统就不知道,默认也为无限长(可以验证:你输入p[16]都还可以看到有输出,因为你没指定p[16],所以这个输出是系统随机给的),这时你调用strlen函数来求“长度未知”的字符串,strlen“很聪明”,它就会给你输出一个奇怪的7(但不一定只是7,你换个其他长度的字符串它又可能输出其他数了)
而且:char p[]这种形式下系统是不会在结尾默认加上'\0'的!。只有在指定长度char p[5]={'a','b','c'}或者字符串形式char p[]="abc"的情况下系统才会在末尾默认加上'\0',这时就不会出错。
我指的“系统”是指VC,在Turbo C下运行char p[]={'a','b','c'}就没问题!! 展开
5个回答
展开全部
输出结果是不确定的,因为你的char数组不存在末尾的'\0'
正确的初始化方式应该是:char c[] = "abc";
补充:
只有字符串形式的初始化,编译器才会帮你在某位补零
你用的那种方式,得到数组长度就是3,哪里来有位置补零呢?
正确的初始化方式应该是:char c[] = "abc";
补充:
只有字符串形式的初始化,编译器才会帮你在某位补零
你用的那种方式,得到数组长度就是3,哪里来有位置补零呢?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼上说的有道理,如果您的空白内存单元比较多的话,那么在数组最后一个元素'c’之后可能是'\0',那么正好结束strlen函数,而输出3,我刚把您的代码复制过去,运行了下是3,以前我也不明白为什么,有的时候正确,有的时候错误,原因就是没有在数组即字符串末尾加'\0',所以赋值最好用字符串,即方便,系统又会自动加结束符,希望能够帮到您。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
输出结果是不确定的,你没有显式在数组中声明 '\0'
你直接printf("%s", c) 得到的字符串是 abc烫烫 这样的形式
你直接printf("%s", c) 得到的字符串是 abc烫烫 这样的形式
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这个用法就有问题
规范的两种用法
要么char c[4]={'a','b','c'}; 必须指定长度,否则会出错
要么char c[]="abc" 这个自动运行库就会在末尾加/0
不信你运行下strlen是不是对的
规范的两种用法
要么char c[4]={'a','b','c'}; 必须指定长度,否则会出错
要么char c[]="abc" 这个自动运行库就会在末尾加/0
不信你运行下strlen是不是对的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-01-03
展开全部
char c[]={'a','b','c'} ; 等价于 cha c[2]="ab";c[2]='c';
而不是 char c[] = "abc"; 这就是区别, 不知你能不能看得懂
而不是 char c[] = "abc"; 这就是区别, 不知你能不能看得懂
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询