C语言printf添加附加无用信息

C language printf add additional useless message

我尝试模拟 linux 文件权限使用 st_mode,但是当我打印结果时,它有一条额外的不需要的消息。

/* file permission */
  char buf[9] = {0};
  char tmp_buf[] = "rwxrwxrwx";
  int i;
  for(i = 0; i < 9; i++) {
    if (sta.st_mode & (1 << (8 - i))) buf[i] = tmp_buf[i];
    else buf[i] = '-';
  }
  printf("%s", buf);

这是我的代码,但结果类似于 'rw-rw-r--rwxrwxrwx' strlen(buf) 是 18 ....有人可以帮忙吗?我不确定为什么 temp_buf 附加到 'buf'

转换说明符 %s 需要一个表示字符串的参数。但是,数组 buf 似乎不包含字符串。

要么将数组扩大一个字节作为终止零

char buf[10] = {0};

或者直接使用(在转换符号前指定精度s

printf("%.9s", buf);

或者

printf( "%.*s", ( int )sizeof( buf ), buf );