我正在从stdin读取一个文件权限字符串,我想创建另一个字符串,该字符串将保存用户在stdin中输入的字符串中的第一个字符以外的所有字符。

int main(){
  char allPermissions[10];
  char permissions[9];

  scanf("%s", allPermissions);


  for(int i = 1; i <= 9; i++) {
    char temp = allPermissions[i];
    //printf("%c", temp);
    permissions[i-1] = temp;
  }
  printf("%s\n", permissions);

  return 0;
}

如果用户输入:drwx------
然后我希望程序输出:rwx------
但我得到的是:rwx---drwx-------
我也不知道为什么。

最佳答案

循环遍历整个字符串并将每个元素逐个复制到目标字符串中是可行的,但这是低效且非屈光性的C。您可以在O(1)中完成此操作;从stdin读取字符串后,只需在字符串开始后指向一个:

printf("%s\n", allPermissions + 1);

这也适用于将字符串复制到新缓冲区的操作:
strcpy(permissions, allPermissions + 1);

请注意,数组大小10不足以读取像“drwx--”这样的字符串,因为还需要考虑空终止符。一般来说,我不会使用scanf-家族函数来读取stdinfgets是一个更好的选择。

关于c - 如何检索字符串的一部分?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54334484/

10-11 22:40
查看更多