gpt4 book ai didi

c++ - c、c++最基本的双引号

转载 作者:太空宇宙 更新时间:2023-11-04 05:06:16 26 4
gpt4 key购买 nike

char* a="HELLO WORLD";

IF ADDRESS of 'H' is 0x01 then the printf with %s prints to D 但如果相同的代码是用手动打印例程编写的

while(*a!=NULL) {printf("%c",n[a]);n++;}

这会打印更多的字符..但是

printf("%s",a);

完美打印。

while(*a++) printf("%c", *(a-1)); or 

for(;*a++;)printf("%c", *(a-1));

虽然有效,但我不想要解决方案,而是过程机制..

所以我想到的问题是

printf 是否从某个寄存器(或任何内存单元)获取字符串的长度或者它执行字符检查..然后打印...

最佳答案

您索引字符串的方式很奇怪。它适用于字符串,但不会停止,因为您永远不会更改 *a 的值。您的程序所做的是尝试获取 a n 的偏移量,因此对于前 11 个位置,它们是相同的,但循环不会终止,因为 *a永远是'H' .您希望终止条件是 n < strlen(a) .

但是,编写该程序的更简洁的方法是:

int main(int argc, char **argv) {
char *a = "HELLO WORLD";
while(*a) printf("%c", *a++);
return 0;
}

这是有效的,因为 a是一个字符数组,当我们打印出每个字符(取消引用存储在该位置的值)时,我们也会递增到下一个位置。该字符串应以 NULL 引用终止,这将导致循环终止正弦 *a == 0在 NULL 终止符处。

关于c++ - c、c++最基本的双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3396606/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com