1

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

/* 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'

4

1 回答 1

4

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

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

char buf[10] = {0};

或者只是使用(在转换符号之前指定精度s

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

或者

printf( "%.*s", ( int )sizeof( buf ), buf );
于 2020-06-04T21:11:35.063 回答