在'C'中,编程指针用于存储类似char * ptr =“ abc”的字符串,如果您打印'ptr',为什么要打印abc

问题描述 投票:0回答:1

指针主要用于存储其他变量的地址,如下面的代码,

char a='A',*p;
p=&a;
printf("p: %p *p: %c p: %c\n",p,*p,p);

output: p: 0x7ffc81b8d9ef *p: A p: �

1。从上面的输出中,如果我们想打印'p'值,则它正在获取垃圾值。

按字符串

char *p ="A";
printf("p: %p *p: %c p: %s\n",p,*p,p);

output:p: 0x55ce091de714 *p: A p: A

2。从上面的输出中,如果我们要打印'p'值,则将其打印为A。

从1&2'p'仅用于存储地址,但是在第二种情况下为什么要打印总字符串,而为什么在第一种情况下无法打印值。

我们如何确保这一点?

c string memory-management embedded
1个回答
0
投票

1。从上面的输出中,如果我们想打印'p'值,则它正在获取垃圾值。

%c转换说明符希望其参数具有类型charp的类型为char *,并存储a的地址。由于这种类型的不匹配,其行为为undefined,并且输出在字面上可以是任何东西。一种可能是printf试图将p的第一个字节解释为char,但是该值可能超出了基本字符集中可打印字符的范围,因此无论扩展字符是什么,都可以得到一个字形set由系统使用。

2。从上面的输出中,如果我们要打印'p'值,则将其打印为A。

%s转换说明符希望其参数具有类型char *,并指向string中的第一个字符。然后,它将打印该字符串的每个连续字符,直到看到字符串终止符为止。如果您的字符串是"ABC",则输出将是p: <some address> *p: A p: ABC

© www.soinside.com 2019 - 2024. All rights reserved.