有关strlen函数的问题

#include<stdio.h>intmain(void){charstr[10]="0123456789";inta=strlen(str);intb=sizeof(... #include<stdio.h>
int main(void)
{
char str[10]="0123456789";
int a=strlen(str);
int b=sizeof(str);
printf("%d%10d",a,b) ;
getch();
return(0);
}

前者不是应该输出10 10么为什么我输出的是 17 10,如果变成出ch[10]="012345678"双引号里一共9个字符输出的a就是10了而十个字符就变成17,是哪里的问题
展开
 我来答
phd121212
2013-01-29 · TA获得超过494个赞
知道小有建树答主
回答量:114
采纳率:0%
帮助的人:44.3万
展开全部

这是编译器的问题。

char str[10]="0123456789";中]"0123456789”的字符长度不是10而是11.所以你定义的char str[10]这个显然不能够大。系统自动给的‘\0‘结束符被挤出了str的内存空间。所以,编译器继续往下读取。接下来读取的,是不确定的。不同的编译器读取的不一样,但总能找到并读取到‘\0’结束符。

就那我的编译系统来说吧,得到的结果是15   10.

#include<stdio.h>

int main(void)

{

char str[10]="0123456789";

int a=strlen(str);

int b=sizeof(str);

 printf("%d%10d",a,b) ;

 getch();

 return(0);

百度网友1095690
2013-01-28 · 超过15用户采纳过TA的回答
知道答主
回答量:36
采纳率:0%
帮助的人:47.2万
展开全部
数组越界了,编译器并不会检查这个问题,所以这个17就是越界之后的“严重后果”,如果在某些时候,这种“严重后果”会是灾难性的。因此,要考虑的并不是这个17或是10甚至什么11哪个更为合理这种问题,而作为程序员就应该要避免这样的越界问题!避免这样的错误发生。对于错误就没有合理可言!!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
316513296
2013-01-28 · TA获得超过111个赞
知道答主
回答量:99
采纳率:100%
帮助的人:116万
展开全部
这个是 strlen 函数 和 sizeof 函数的问题
输出结果应该是 11 10
strlen 函数 是遇到 '\0' 结束 str 是长度10的 而0123456789也是10个数 也就是说str[0]到str[9]里存的是这十个数 因此 系统在str[10]这个位置存了'\0'这是内存溢出, 所以strlen读的时候会出现11, sizeof 这个函数 是str[n] 这个n是多少 读取出来的值就会事 多少。 因此是 10.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yequnanren
2013-01-28 · 超过33用户采纳过TA的回答
知道答主
回答量:90
采纳率:0%
帮助的人:77.4万
展开全部
你这个代码里打出来的a值应该是一个随机数,因为str的buffer大小是10,而"0123456789"的长度也是10,刚好把str的10个字节占满了,然而strlen是计算字符串的长度的,它以'\0'为结束标志,但是你的str只有10个字节,也就是说'\0'没有地方放了。
如果你想strlen(str)等于10的话,那么就把它定义成char str[11]="0123456789";这样就多出一个字节用来放'\0'
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
山脊上的行者
2013-01-28
知道答主
回答量:8
采纳率:0%
帮助的人:6.5万
展开全部
char str[10]="0123456789";
指针越界了,因为有一个隐藏的'\0'

如果变成出ch[10]="012345678" strlen应该是9, strlen计算字符串长度,不包括'\0'在内
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式