黑马程序员技术交流社区
标题:
求大神给我解释一下这个问题,
[打印本页]
作者:
huanglinwang
时间:
2016-5-16 22:56
标题:
求大神给我解释一下这个问题,
//
// main.c
// %s输出字符串数组
//
// Created by huanglinwang on 16/5/13.
// Copyright © 2016年 Linwang. All rights reserved.
//
#include <stdio.h>
int main(int argc, const char * argv[]) {
char ch[2] = {'a','\0'};
char ch2[3] = { 'c','d','e'};
printf("%s\n",ch2);
//这里输出的是cdea 是因为???求解
return 0;
}
作者:
栗海云
时间:
2016-5-16 23:19
因为cde没有\0 而高位的ch字符数组有\0 打印遇到\0结束
作者:
TGII
时间:
2016-5-17 00:31
%s遇到\0才结束,
作者:
上帝的天使
时间:
2016-5-17 10:19
因为字符数组{'a'.'\0'}和{'c','d,'e'}存放在栈区(栈区主要存放临时变量),而栈区内数据是按照从高到低存放的。
作者:
上帝的天使
时间:
2016-5-17 10:26
因为字符数组{'a','\0'}和{ 'c','d','e'}是存放在栈区的,栈区数据是从高到低存放的,因此先声明到ch数组存放在高字节,而后声明动ch2存放在低字节。对于字符数组来说打印时遇到'\0'结束。而打印是按照从低地址—>高地址的顺序打印的,因此当打印完ch2时,检测到没有换行符,所以会继续打印高地址的ch字符数组{'a','\0'},所以打印的结果就是:"cdea"了。
作者:
上帝的天使
时间:
2016-5-17 10:28
1.字符数组{'a','\0'}和{ 'c','d','e'}是存放在栈区的。
2.栈区数据是从高地址到低地址存放的,因此先声明的ch数组存放在高字节,而后声明动ch2存放在低字节。
3.对于字符数组来说打印时遇到'\0'结束。而打印是按照从低地址—>高地址的顺序打印的。
4.因此先从低地址低ch2字符数组开始打印,当打印完ch2时,检测到没有换行符,所以会继续打印高地址的ch字符数组{'a','\0'},所以最后打印出来的结果就是:"cdea"了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2