小编use*_*192的帖子

以循环方式查找特定字符索引的Pythonic方法

假设我有一个像这样的字符串:

'abcdefgha'
Run Code Online (Sandbox Code Playgroud)

我想找到a索引 2 之后的下一个字符的索引(以循环方式)。这意味着在这种情况下它应该找到索引 7(通过mystr.index('a', 2));然而,在这种情况下:

'abcdefgh'
Run Code Online (Sandbox Code Playgroud)

它应该返回索引 0。有没有这样的内置函数?

python

5
推荐指数
1
解决办法
145
查看次数

为什么我没有看到 printf 缓冲区刷新?

我有一个简单的程序(工作示例):

#include <unistd.h>
#include <stdio.h>

int main() {
  pid_t my_pid = getpid();
  char str[30];

  sprintf(str, "/proc/%d/fd", my_pid);
  printf("hello, I am gonna print out: %s", str);

  execvp( "ls", (char *[]) { "ls", str, NULL } );

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

在 Linux VM 上用 gcc 编译。我的问题是为什么发送到的输出printf永远不会打印。

我知道printf缓冲其输出并且仅刷新\n. 我想知道为什么在这种情况下它不打印。我读到输出流在程序退出时被刷新。正在一块内存printf中缓冲输出(我在实现中确认了这一点)。malloc

我对此的疑问(欢迎更多详细信息):

  • 为什么注释掉调用会execvp导致输出打印在 上stdout,但它没有按原样打印?ls我的想法是,即使在蚕食进程之后,它是否仍然被认为是程序退出?
  • printf的内存缓冲区会被视为输出流吗?
  • 与这个问题完全不相关的细节是我想知道为什么我的进程不继承10文件描述符。zsh255bash

c printf stdout execvp output

4
推荐指数
1
解决办法
96
查看次数

解压列表索引?

我经常发现我有这样的事情:

cur = [0, 0] # the indices into array
matrix = [[1,1,1]]
Run Code Online (Sandbox Code Playgroud)

我在哪里

matrix[cur[0]][cur[1]]
Run Code Online (Sandbox Code Playgroud)

这里有任何类型的解包语法吗?喜欢:

matrix[*cur]
Run Code Online (Sandbox Code Playgroud)

python

2
推荐指数
1
解决办法
95
查看次数

gcc 在数组初始值设定项中没有出现额外逗号错误

这是一个例子:

int main () 
{
  int a[] = {1, 2, 3,};
}
Run Code Online (Sandbox Code Playgroud)

,注意后面的额外内容3-Wall即使一切都没有警告。我在阅读一些coreutils代码时注意到这一点,这些代码似乎在数组的最后一个元素后面有一个逗号。这个 UB 是实现定义的还是按原样就可以?

c grammar gcc initialization list-initialization

1
推荐指数
1
解决办法
99
查看次数

zsh 如何处理多个重定向?

例如,在 中zsh,您可以执行以下操作:

% cat < file1 < file2
Run Code Online (Sandbox Code Playgroud)

你会看到两者。如何zsh在对程序透明的同时做到这一点cat

cat程序在 POSIX 系统上读取STDIN_FILENO并打印STDOUT_FILENO,那么一个文件描述符如何指向多个打开的文件描述呢?在 中sh,仅执行最后一个重定向(最右侧)。

c operating-system zsh file sh

0
推荐指数
1
解决办法
160
查看次数