为什么以下具有它的作用 - 它打印一个充满随机字符的终端然后退出,留下一个命令提示符,当你输入它时会产生垃圾.(我试过它,因为我认为它会产生一个seg错误).
#includeint main(){ char* s = "lololololololol"; while(1){ printf("%c", *s); s++; } }
它是用以下编译的:
gcc -std=c99 hello.c
Jon Skeet.. 20
它最终会出现故障,但在此之前它会打印出同一页面中的任何字节.这就是你在屏幕上看到随机字符的原因.
那些可能包括转义序列来改变(比如)控制台的字符编码.这就是为什么你在退出后在控制台上键入时最终会出现乱码的原因.
它最终会出现故障,但在此之前它会打印出同一页面中的任何字节.这就是你在屏幕上看到随机字符的原因.
那些可能包括转义序列来改变(比如)控制台的字符编码.这就是为什么你在退出后在控制台上键入时最终会出现乱码的原因.
您只是打印出内存中的内容,因为您的循环不会停留在字符串的末尾.每个随机字节都被解释为一个字符.当你到达内存页面的末尾(进入不可读的区域)时,它会出现故障.
因为你有一个无限循环(while(1)
),并且你不断得到指针(*s
)的当前值,然后将指针向前移动一个char(s++
).这具有在字符串结尾之后很好地进入"垃圾"(未初始化的内存)的效果,因此将其打印到控制台.
除了其他所有人都说你忽略了字符串终端字符并且只是打印内存超过字符串的内存时,你的命令提示符也是"垃圾"的原因是打印一个特定的"不可打印"字符,您的终端会话处于奇怪的字符模式.(我不知道它是哪个角色或者它改变了什么模式,但也许其他人可以知道它比我知道更好.)