c编程书说我的字符串必须为空终止以使用printf打印它,但仍然以下程序打印字符串尽管它是非空终止!
#include <stdio.h>
#include <stdlib.h>
int main(){
int i ;
char str[10] ;
for(i = 0 ; i < 10 ; i++ ) {
str[i] = (char)(i+97) ;
}
printf("%s",str) ;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用codeblocks IDE.
iab*_*der 10
读取超出数组边界的未定义行为,实际上是不幸的是它没有崩溃,如果你运行足够多次或者在函数中调用它可能(或可能不)崩溃,你应该总是终止字符串,或使用宽度说明符:
printf("%.10s", str);
Run Code Online (Sandbox Code Playgroud)
无论在第10个元素之后是str什么,都是空的.该null超出了数组的已定义边界,但C没有数组边界检查.在你的情况下,这就是运气的原因.