
有关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,是哪里的问题 展开
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,是哪里的问题 展开
8个回答
展开全部
这是编译器的问题。
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);
}
展开全部
数组越界了,编译器并不会检查这个问题,所以这个17就是越界之后的“严重后果”,如果在某些时候,这种“严重后果”会是灾难性的。因此,要考虑的并不是这个17或是10甚至什么11哪个更为合理这种问题,而作为程序员就应该要避免这样的越界问题!避免这样的错误发生。对于错误就没有合理可言!!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个是 strlen 函数 和 sizeof 函数的问题
输出结果应该是 11 10
strlen 函数 是遇到 '\0' 结束 str 是长度10的 而0123456789也是10个数 也就是说str[0]到str[9]里存的是这十个数 因此 系统在str[10]这个位置存了'\0'这是内存溢出, 所以strlen读的时候会出现11, sizeof 这个函数 是str[n] 这个n是多少 读取出来的值就会事 多少。 因此是 10.
输出结果应该是 11 10
strlen 函数 是遇到 '\0' 结束 str 是长度10的 而0123456789也是10个数 也就是说str[0]到str[9]里存的是这十个数 因此 系统在str[10]这个位置存了'\0'这是内存溢出, 所以strlen读的时候会出现11, sizeof 这个函数 是str[n] 这个n是多少 读取出来的值就会事 多少。 因此是 10.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这个代码里打出来的a值应该是一个随机数,因为str的buffer大小是10,而"0123456789"的长度也是10,刚好把str的10个字节占满了,然而strlen是计算字符串的长度的,它以'\0'为结束标志,但是你的str只有10个字节,也就是说'\0'没有地方放了。
如果你想strlen(str)等于10的话,那么就把它定义成char str[11]="0123456789";这样就多出一个字节用来放'\0'
如果你想strlen(str)等于10的话,那么就把它定义成char str[11]="0123456789";这样就多出一个字节用来放'\0'
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
char str[10]="0123456789";
指针越界了,因为有一个隐藏的'\0'
如果变成出ch[10]="012345678" strlen应该是9, strlen计算字符串长度,不包括'\0'在内
指针越界了,因为有一个隐藏的'\0'
如果变成出ch[10]="012345678" strlen应该是9, strlen计算字符串长度,不包括'\0'在内
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询