当前位置: 代码迷 >> C语言 >> 傻瓜问题:到底是我傻还是答案傻?
  详细解决方案

傻瓜问题:到底是我傻还是答案傻?

热度:143   发布时间:2005-12-17 18:56:00.0
傻瓜问题:到底是我傻还是答案傻?
"\ta\017bc"

这个破字符串到底有几个字符?不是5个???答案是6
\017不是一个字符吗??\加1到3个八进制数字代表一个ASC码嘛~~~
搜索更多相关的解决方案: 傻瓜  

----------------解决方案--------------------------------------------------------

是5我上机运行了:
#include "stdio.h"
#include "string.h"
void main()
{
char str[20]="\ta\017bc";
int a=strlen(str);
printf("%d\n",a);
}
结果是:5


----------------解决方案--------------------------------------------------------

谢谢~~~~~~~~~


----------------解决方案--------------------------------------------------------
是书上说6个 还是编译器上说6个!!
what is '\0 ' ?

----------------解决方案--------------------------------------------------------
NULL
----------------解决方案--------------------------------------------------------

不明白


----------------解决方案--------------------------------------------------------
以下是引用fantasyop在2005-12-17 22:02:00的发言:
是书上说6个 还是编译器上说6个!!
what is '\0 ' ?

书上说的,我这里没办法上机运行,所以有时候比较郁闷.呵呵\017是一个字符,\带一到三个八进制数表示一个ASC码


----------------解决方案--------------------------------------------------------
用strlen(str)命令时不含‘\0',可换成sizeof(str),字符串最后要有一个默认的'\0'作为结束。
----------------解决方案--------------------------------------------------------
sizeof 是实际分配的内寸空间,sizeof(str[20])等于20,strlen是实际字符串的长度,并不包含结束符,所以实际是占6个字节的.
----------------解决方案--------------------------------------------------------
答案是:6
#include "stdio.h"
#include "string.h"
void main()
{
char str[20]="\ta\017bc";
int a=strlen(str);
int b=sizeof(str);
printf("%d\n",a);
printf("%d\n",b);
}
运行结果:
5
2
因为strlen(str)不记入'\0'这个字节,'\t','a','\017','b','c','\0';
sizeof(str)只计算'\0'之前的字符,不计入'\0',所以'\t','a',两个.
----------------解决方案--------------------------------------------------------
  相关解决方案