A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

//
//  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;
}

5 个回复

正序浏览
1.字符数组{'a','\0'}和{ 'c','d','e'}是存放在栈区的。
2.栈区数据是从高地址到低地址存放的,因此先声明的ch数组存放在高字节,而后声明动ch2存放在低字节。
3.对于字符数组来说打印时遇到'\0'结束。而打印是按照从低地址—>高地址的顺序打印的。
4.因此先从低地址低ch2字符数组开始打印,当打印完ch2时,检测到没有换行符,所以会继续打印高地址的ch字符数组{'a','\0'},所以最后打印出来的结果就是:"cdea"了。
回复 使用道具 举报
因为字符数组{'a','\0'}和{ 'c','d','e'}是存放在栈区的,栈区数据是从高到低存放的,因此先声明到ch数组存放在高字节,而后声明动ch2存放在低字节。对于字符数组来说打印时遇到'\0'结束。而打印是按照从低地址—>高地址的顺序打印的,因此当打印完ch2时,检测到没有换行符,所以会继续打印高地址的ch字符数组{'a','\0'},所以打印的结果就是:"cdea"了。
回复 使用道具 举报
因为字符数组{'a'.'\0'}和{'c','d,'e'}存放在栈区(栈区主要存放临时变量),而栈区内数据是按照从高到低存放的。
回复 使用道具 举报
%s遇到\0才结束,
回复 使用道具 举报
因为cde没有\0 而高位的ch字符数组有\0 打印遇到\0结束
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马