@@char数组初始化问题@@

pb8 2013-01-24 05:30:16
int main(int argc, char* argv[])
{
char str1[]="123456";
char str2[]="123456\0123456";
printf("数组1的长度=%d\n",sizeof(str1));
printf("数组2的长度=%d\n",sizeof(str2));
return 0;
}


输出结果如下:
数组1的长度=7
数组2的长度=12

数组1的长度很容易理解,因为后面会自动加个“\0”
对于数组2的长度有些疑惑,请高手指点
...全文
384 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
bravery36 2013-01-25
  • 打赏
  • 举报
回复
我发傻了,转义后肯定就不在常规字符的范围了,有空时我还是得补下ascII码的值才行。
bravery36 2013-01-25
  • 打赏
  • 举报
回复
引用 20 楼 lin5161678 的回复:
引用 19 楼 bravery36 的回复:其实我没懂为是\012而不是\0123,也许是因为0123也就是0x53不是一个有效的特殊字符吧。但是在\0和\012之间的选择我就更不懂了。 唯一的收获是,我绝对要避免这种变态的写法。 八进制 \XXX 最长三位
这样啊,受教了。是所有的控制字符都不大于这个值还是八进制比较特殊?没太注意转义后的值。
lin5161678 2013-01-25
  • 打赏
  • 举报
回复
引用 19 楼 bravery36 的回复:
其实我没懂为是\012而不是\0123,也许是因为0123也就是0x53不是一个有效的特殊字符吧。但是在\0和\012之间的选择我就更不懂了。 唯一的收获是,我绝对要避免这种变态的写法。
八进制 \XXX 最长三位
bravery36 2013-01-25
  • 打赏
  • 举报
回复
其实我没懂为是\012而不是\0123,也许是因为0123也就是0x53不是一个有效的特殊字符吧。但是在\0和\012之间的选择我就更不懂了。 唯一的收获是,我绝对要避免这种变态的写法。
天涯洪七公 2013-01-25
  • 打赏
  • 举报
回复
'\101'表示字符'A' '\012'表示加车符'\n' 其中,101,012是八进制。 \ddd代表八进制数 \xhh代表十六进制数 并且这些数在单引号内,代表一个字符,这个字符就是这个数字在ASCII码的字符 我想楼主这么高智商应该懂了……
oN5GrzoN 2013-01-25
  • 打赏
  • 举报
回复
引用 14 楼 pb8 的回复:
引用 4 楼 lin5161678 的回复:\012 作为一个八进制数 其他的不用解释吧 高人,为什么是 \012 是表示一个八进制,而不是\01或\0123456呢?它是以什么作为分隔的?
unsigned char 最大是255,所以它按\0123456中最长的长,所以是012
oN5GrzoN 2013-01-25
  • 打赏
  • 举报
回复
引用 4 楼 lin5161678 的回复:
\012 作为一个八进制数 其他的不用解释吧
高手在民间
lin5161678 2013-01-25
  • 打赏
  • 举报
回复
一个无符号的 char 最大 255 就是 0377 那么 3位数就够了 \XXX 形式为 然后 0 可以省略 也可以不省略 这里不省略 \012 三位 一个char 后面的3就是另外一个char的内容 然后像 \018 这里八进制表示的数字里面不会出现8 于是 \01 就是一个char
pb8 2013-01-25
  • 打赏
  • 举报
回复
引用 4 楼 lin5161678 的回复:
\012 作为一个八进制数 其他的不用解释吧
高人,为什么是 \012 是表示一个八进制,而不是\01或\0123456呢?它是以什么作为分隔的?
ForestDB 2013-01-25
  • 打赏
  • 举报
回复
贪婪 解析的基本原则 \012一起算了。
微光世界· 2013-01-25
  • 打赏
  • 举报
回复
一个知识点啊,学习了!
prajna 2013-01-24
  • 打赏
  • 举报
回复
順便多說一點, 只有字符數組纔有這種初始化方式: char str[]="123456"; 其他類型數組初始化要用{}, char str[]={'1','2','3','4','5','6','\0'}; 這個和上面的等價。
prajna 2013-01-24
  • 打赏
  • 举报
回复
引用
\012 作为一个八进制数
++ '\012' -- oct '\x0a' -- hex '\n' 三种表示,同一個字符 -- new line char str2[]="123456\0123456"; sizeof(str2) -- 表示數組str2的大小, strlen(str2) -- 表示zero-terminated字符串str2的長度。 例如: char str[]="123456\000789"; sizeof(str) -- 11 strlen(str) -- 6
wade_2003 2013-01-24
  • 打赏
  • 举报
回复

调试时发现,str2在内存中是这样存储的,strlen在计算时,就\n 认为是一个字符?
wade_2003 2013-01-24
  • 打赏
  • 举报
回复

int main(int argc, char* argv[])
{    
    char str1[]="123456";   
    char str2[]="123456\0123456";  
    printf("数组1的长度=%d\n",sizeof(str1));   
    printf("数组2的长度=%d\n",sizeof(str2)); 
    printf("数组1的长度=%d\n",strlen(str1));   
    printf("数组2的长度=%d\n",strlen(str2)); 
    return 0;
}
输出结果: 7 12 6 11 高手指点指点
lee_鹿游原 2013-01-24
  • 打赏
  • 举报
回复
引用 8 楼 lile1234_show 的回复:
引用 7 楼 lin5161678 的回复:引用 6 楼 lile1234_show 的回复:引用 4 楼 lin5161678 的回复:\012 作为一个八进制数 其他的不用解释吧 我说的是长度strlen, Ok? 长度 在这里一直说的是数组长度 根据楼主说的去理解 : 数组1的长度很容易理解,因为后面会自动加个“\0”
我错 。 我理解错!
lee_鹿游原 2013-01-24
  • 打赏
  • 举报
回复
引用 7 楼 lin5161678 的回复:
引用 6 楼 lile1234_show 的回复:引用 4 楼 lin5161678 的回复:\012 作为一个八进制数 其他的不用解释吧 我说的是长度strlen, Ok? 长度 在这里一直说的是数组长度
根据楼主说的去理解 : 数组1的长度很容易理解,因为后面会自动加个“\0”
lin5161678 2013-01-24
  • 打赏
  • 举报
回复
引用 6 楼 lile1234_show 的回复:
引用 4 楼 lin5161678 的回复:\012 作为一个八进制数 其他的不用解释吧 我说的是长度strlen, Ok?
长度 在这里一直说的是数组长度
lee_鹿游原 2013-01-24
  • 打赏
  • 举报
回复
引用 4 楼 lin5161678 的回复:
\012 作为一个八进制数 其他的不用解释吧
我说的是长度strlen, Ok?
lin5161678 2013-01-24
  • 打赏
  • 举报
回复
引用 3 楼 lile1234_show 的回复:
引用 2 楼 lin5161678 的回复:引用 1 楼 lile1234_show 的回复:长度是 strlen 。 完毕错完毕 额?错在哪?
在这里 strlen 11 sizeof 12 .............
加载更多回复(4)

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧