菜鸟请教C语言printf的问题

清竹小雨 2014-05-24 09:20:25
为什么输出却是这样呢?查了下标准,难道这属于UB?
#include <stdio.h>
#include <string.h>

int main()
{
char *ch = "啊";

printf("%d\n", sizeof(ch));
//printf("the ch was 0x%X, 0x%X\n", (unsigned char)ch[0],(unsigned char)ch[1]);
printf("the ch was %#X, %#X\n", ch[0]&0xFF,ch[1]&0xFF);
//printf("the ch was %#X, %#X\n",ch[0], ch[1]);
return 0;
}
为什么上面那个代码却只显示一个字节的十六进制数,而不是四字节的十六进制数呢?
...全文
625 40 打赏 收藏 转发到动态 举报
写回复
用AI写文章
40 条回复
切换为时间正序
请发表友善的回复…
发表回复
果冻虾仁 2014-05-31
  • 打赏
  • 举报
回复
这个有什么疑问?因为你的是指针啊。当然会打印它的地址了
赵4老师 2014-05-30
  • 打赏
  • 举报
回复
推荐楼主阅读我的博客文章《参禅与悟道——浅谈人生》,重点参考我的座右铭:人必有所不为然后可以有为。
afire22 2014-05-30
  • 打赏
  • 举报
回复
引用 34 楼 ko1_1ok 的回复:
[quote=引用 31 楼 afire22 的回复:] sizeof() 和 strlen()的区别一看就知道!基础没学好
好吧,那我也问你: 1、sizeof(数组名)的时候,返回数组的长度吗? 2、strlen和sizeof都是库函数吗? 3、sizeof是返回的值是在编译时决定的,还是在运行时决定的? [/quote] 1.比如声明数组char a[20],则sizeof(a)= 20,但strlen是根据有效字符来判断的,检测的是'\0'。如果声明的是字符串指针char* a = "hello";则sizeof(a)=4, strlen(a) = 5;数组名和指针有区别。因为数组的运算中,数组名还是要去调用指针的。 2.都是库函数 3.sizeof的值编译时就决定了
清竹小雨 2014-05-30
  • 打赏
  • 举报
回复
引用 36 楼 afire22 的回复:
[quote=引用 34 楼 ko1_1ok 的回复:] [quote=引用 31 楼 afire22 的回复:] sizeof() 和 strlen()的区别一看就知道!基础没学好
好吧,那我也问你: 1、sizeof(数组名)的时候,返回数组的长度吗? 2、strlen和sizeof都是库函数吗? 3、sizeof是返回的值是在编译时决定的,还是在运行时决定的? [/quote] 1.比如声明数组char a[20],则sizeof(a)= 20,但strlen是根据有效字符来判断的,检测的是'\0'。如果声明的是字符串指针char* a = "hello";则sizeof(a)=4, strlen(a) = 5;数组名和指针有区别。因为数组的运算中,数组名还是要去调用指针的。 2.都是库函数 3.sizeof的值编译时就决定了 [/quote] 1.
#include <stdio.h>

void show_array(int arr[])
{
	printf("the value of sizeof was %d\n", sizeof(arr) );

}

int main()
{
	int arr[4] = {
		1,2,3,4
	};
	
	show_array(arr);
	
	return 0;
}
2.错
cn_lf_c_android 2014-05-30
  • 打赏
  • 举报
回复
ch指针指向字符串,这个字符串sizeof就是4,一个字是4个字节
赵4老师 2014-05-29
  • 打赏
  • 举报
回复
引用 28 楼 ko1_1ok 的回复:
[quote=引用 25 楼 zhao4zhong1 的回复:] 奉劝楼主: 这辈子不用sizeof,完全不妨碍你成为软件开发高级工程师。
那你直接用01来完成编码,完全不妨碍你成为软件开发高级工程师 为什么要用编译器?还要发展计算理论做什么?[/quote] 你知道的太多了! 啊——!……
清竹小雨 2014-05-29
  • 打赏
  • 举报
回复
引用 32 楼 zhao4zhong1 的回复:
[quote=引用 28 楼 ko1_1ok 的回复:] [quote=引用 25 楼 zhao4zhong1 的回复:] 奉劝楼主: 这辈子不用sizeof,完全不妨碍你成为软件开发高级工程师。
那你直接用01来完成编码,完全不妨碍你成为软件开发高级工程师 为什么要用编译器?还要发展计算理论做什么?[/quote] 你知道的太多了! 啊——!…… [/quote] 小辈与你相差甚远
afire22 2014-05-29
  • 打赏
  • 举报
回复
sizeof() 和 strlen()的区别一看就知道!基础没学好
清竹小雨 2014-05-29
  • 打赏
  • 举报
回复
引用 31 楼 afire22 的回复:
sizeof() 和 strlen()的区别一看就知道!基础没学好
好吧,那我也问你: 1、sizeof(数组名)的时候,返回数组的长度吗? 2、strlen和sizeof都是库函数吗? 3、sizeof是返回的值是在编译时决定的,还是在运行时决定的?
清竹小雨 2014-05-29
  • 打赏
  • 举报
回复
引用 30 楼 l5250926 的回复:
[quote=引用 27 楼 ko1_1ok 的回复:] [quote=引用 24 楼 l5250926 的回复:] 你哪里用%c了????printf(“%d”,sizeof(ch))就是输出指针变量ch的字节数塞,不是4是什么
引用 10 楼 shtenlll 的回复:
用“char”的话“%d”要改成%c
我回复的是十楼的话。。 好吧,那l5250926: 那我问你, 1、sizeof为什么不输出字符串所占字节数长度 2、sizeof是什么? 3、sizeof是返回的值是在编译时决定的,还是在运行时决定的[/quote] sizeof是求类型的大小的! sizeof(指针)返回的是ch变量本身的大小,至于你说的那些,我不知道,我也没必要去知道 问问题的人应该保持谦和的态度,即使别人回答错了,也是一片好心,lz学的东西还有很多,不仅仅是技术上的。[/quote] 以事论事,从上面的回答来看,也不是所有回答者都是一片好心,那我也不客气。如果语气不合适你的话,还望海涵
赵4老师 2014-05-28
  • 打赏
  • 举报
回复
奉劝楼主: 这辈子不用sizeof,完全不妨碍你成为软件开发高级工程师。
l5250926 2014-05-28
  • 打赏
  • 举报
回复
引用 27 楼 ko1_1ok 的回复:
[quote=引用 24 楼 l5250926 的回复:] 你哪里用%c了????printf(“%d”,sizeof(ch))就是输出指针变量ch的字节数塞,不是4是什么
引用 10 楼 shtenlll 的回复:
用“char”的话“%d”要改成%c
我回复的是十楼的话。。 好吧,那l5250926: 那我问你, 1、sizeof为什么不输出字符串所占字节数长度 2、sizeof是什么? 3、sizeof是返回的值是在编译时决定的,还是在运行时决定的[/quote] sizeof是求类型的大小的! sizeof(指针)返回的是ch变量本身的大小,至于你说的那些,我不知道,我也没必要去知道 问问题的人应该保持谦和的态度,即使别人回答错了,也是一片好心,lz学的东西还有很多,不仅仅是技术上的。
清竹小雨 2014-05-28
  • 打赏
  • 举报
回复
引用 26 楼 u012514171 的回复:
输出的是‘啊’(两个字节)的首地址
好吧,你给我解释下为什么吧
清竹小雨 2014-05-28
  • 打赏
  • 举报
回复
引用 25 楼 zhao4zhong1 的回复:
奉劝楼主: 这辈子不用sizeof,完全不妨碍你成为软件开发高级工程师。
那你直接用01来完成编码,完全不妨碍你成为软件开发高级工程师 为什么要用编译器?还要发展计算理论做什么?
清竹小雨 2014-05-28
  • 打赏
  • 举报
回复
引用 24 楼 l5250926 的回复:
你哪里用%c了????printf(“%d”,sizeof(ch))就是输出指针变量ch的字节数塞,不是4是什么
引用 10 楼 shtenlll 的回复:
用“char”的话“%d”要改成%c
我回复的是十楼的话。。 好吧,那l5250926: 那我问你, 1、sizeof为什么不输出字符串所占字节数长度 2、sizeof是什么? 3、sizeof是返回的值是在编译时决定的,还是在运行时决定的
lanlvy 2014-05-28
  • 打赏
  • 举报
回复
输出的是‘啊’(两个字节)的首地址
l5250926 2014-05-27
  • 打赏
  • 举报
回复
你哪里用%c了????printf(“%d”,sizeof(ch))就是输出指针变量ch的字节数塞,不是4是什么
Mortred_cp 2014-05-27
  • 打赏
  • 举报
回复
printf("the ch was:%08x\n", ch);
twtiqfn 2014-05-27
  • 打赏
  • 举报
回复
这小东西都不会啊,真是的
ForestDB 2014-05-27
  • 打赏
  • 举报
回复
ch是char *,sizeof(ch)即sizeof(char *),32位平台下输出4表示char指针是4个byte大小。
加载更多回复(20)

69,371

社区成员

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

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