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) ;
}

我正在使用代码块IDE。

最佳答案

读取超出数组范围是未定义的行为,实际上您很不幸它没有崩溃,如果您运行它足够多次或在它可能(或可能不会)崩溃的函数中调用它,您应该始终终止字符串,或使用宽度说明符:

printf("%.10s", str);

08-27 00:57
查看更多