我习惯了 IDE 风格的选项卡面板,并且在尝试使用缓冲区和拆分复制此功能时,我遇到了一些 arggghh 诱导场景。
我有以下相关的 .vimrc 设置:
set hidden
set switchbuf=useopen,usetab
Run Code Online (Sandbox Code Playgroud)
现在,假设我打开 4 个缓冲区,先垂直分割,然后水平分割,以便 1 个缓冲区显示在左侧,2 个缓冲区显示堆叠在右侧。第四个缓冲区是隐藏的(在左侧分割处打开)。
当光标位于左分割中时,使用 :bnext 和 :bprevious 循环遍历左分割中的所有缓冲区;这是不可取的,因为我真的没有用在两个不同的分割中查看相同的文件内容(有没有办法选择加入 vim 克隆缓冲区影响?)。使用 :sbnext 和 :sbprevious 对于可见缓冲区非常有效,但是一旦遇到隐藏缓冲区,它就会在新的分割中打开,从而对我的布局造成严重破坏。当使用 10 个以上的缓冲区时,问题会变得更糟。
理想情况下,我想轮换给定分割内所有可见和隐藏的缓冲区(即打开缓冲区的位置))内所有可见和隐藏的缓冲区。
建议表示赞赏。
ps 现在正在尝试 vim ctrl-space 插件,相当不错,但没有解决上述问题。
谢谢
这是我在 Stackoverflow 上迈出的第一步!
所以,我试图使用setbuf()重定向stdout到char buffer[BUFSIZ]. 当我使用时它工作得很好printf(),但当我使用系统调用时它根本不起作用write()。
这是代码示例:
#include <stdio.h>
#include <unistd.h>
int main(void)
{
char buffer[BUFSIZ];
freopen("/dev/null", "a", stdout);
setbuf(stdout, buffer);
printf("This works\n");
write(stdout->_file, "This doesn't.\n", 14);
fflush(stdout);
freopen("/dev/tty", "a", stdout);
printf("Buffer content :\n%s", buffer);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是
缓冲区内容:
这有效
你知道为什么吗?因为现在我不知道这是如何工作的,我将通过管道将标准输出传输到标准输入,然后读取结果 - 我认为这不是最干净的方法。
谢谢你,祝你有美好的一天 !
我正在开发一个函数,该函数执行特定的 powershell 命令,然后返回输出(如果与 EOF 不同)。该函数第一次正确执行,但第二次输出很奇怪,表明我的代码的某些部分存在缓冲区溢出。我找不到它。否则,我无法为这种行为找出其他可能的解决方案。
\n这是代码:
\nchar* buffer_reset(char* buffer);\nbool jobsreader (const char* printer_name, char* buffer);\n\nint main (int argc, char *argv[]) {\n char buffer[1000];\n char* pbuffer = buffer;\n jobsreader("Microsoft Print to PDF", pbuffer);\n pbuffer = buffer_reset(pbuffer);\n jobsreader("Microsoft Print to PDF", pbuffer);\n return 0;\n}\n\nchar* buffer_reset(char* buffer) {\n char* memory_reset = &buffer[0];\n char* start = memory_reset;\n while (*memory_reset != '\\0') {\n *memory_reset = '\\0';\n memory_reset++;\n }\n buffer = start;\n return buffer;\n}\n\nbool jobsreader (const char* printer_name, char* buffer) {\n FILE *output;\n const …Run Code Online (Sandbox Code Playgroud) 为什么当我只使用整数时程序运行良好?当我为变量“a”插入一个数字然后按 Enter 键后,不会\n保留在缓冲区中吗?如果它确实存在,那为什么我b也可以初始化?如果我定义b为 char 那么b输出将是b 10;换句话说,空换行符。例如,如果我想多次使用(使用什么?)为许多人输入一个名字,我会有什么问题吗?我需要一个清除缓冲区的函数吗?那么出了什么问题以及如何解决这个问题
#include <stdio.h>
int main() {
int a,b;
printf("a ");
scanf("%d",&a);
printf("a=%d",a);
printf("\nb ");
scanf("%d",&b);
printf("b=%d",b);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我有以下代码,但我不确定%0x%x以下代码中的含义是什么?
sprintf(buf, "pixel : %0x%x \n", gpbImageData[100]);
OutputDebugString(buf);
Run Code Online (Sandbox Code Playgroud)
gpbImageData[100] 指向内存中的图像数据.
我有一个问题,我绕道功能recv(ws2_32.dll)并尝试读取数据.我得到leng parametr - 17但在实际缓冲区中只有2个字节的长度.
我的代码:
int WINAPI OwnSend(SOCKET s, const char FAR *buff, int leng, int flags )
{
//why 'leng'==17 and (sizeof(char) * strlen(buff) + 1) == 2?
return pTrampolineSend(s, buff, leng, flags);
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我将缓冲区 (char*) 传递给 C 中的函数。
在函数内部,我为缓冲区分配内存并附加一个字符串(来自虚拟服务器的响应)。当在函数内部打印时,字符串将显示为从服务器发送的。
当尝试从函数外部读取缓冲区时,我没有得到我需要的结果:
A。// 字符* server_message; // 不起作用,错误:: 分段错误(核心已转储)
b. // char* server_message = calloc((BUFFER_SIZE) + 1, sizeof(char)); // 不起作用,没有生成错误,下面的 server_message 的 printf 打印一个空值:: ==> server_message:: || ||
C。char* server_message = calloc((1000 * BUFFER_SIZE) + 1, sizeof(char)); // 分配超出所需内存的工作:: ==> server_message:: || 2016-03-08 12:20:13 你好 ||
我根本不喜欢选项 c,因为我分配的内存超出了我的需要。出于测试目的,BUFFER_SIZE 当前设置为 10。
这是调用部分::
write_to_server(client_socket, message, server_message);
free(message);
printf("\n\n==> server_message:: || %s ||\n\n", server_message);
if (server_message != NULL)
free(server_message);
Run Code Online (Sandbox Code Playgroud)
这是 write_to_server 函数代码:
void write_to_server(int file_descriptor, char* message, char* server_message) …Run Code Online (Sandbox Code Playgroud) 我想从文本文件中读取一些数据.这是文本文件中数据的格式:
A,20, ,0
B,30, ,0
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
public ArrayList rechercherSalle()
{
String nom;
String ligne;
ArrayList<Salle> listeSalles = new ArrayList<Salle>();
Salle salle = new Salle();
try {
InputStream flux = new FileInputStream("salle.txt");
InputStreamReader lecture = new InputStreamReader(flux);
BufferedReader buff = new BufferedReader(lecture);
ligne = buff.readLine();
while (ligne != null) {
String[] objetSalle = ligne.split(",");
nom = objetSalle[0];
String capacite_maxString = objetSalle[1];
Integer capacite_max = Integer.parseInt(capacite_maxString);
String capacite_actuelleString = objetSalle[3];
Integer capacite_actuelle = Integer.parseInt(capacite_actuelleString);
String proprietaire = objetSalle[2];
salle = new Salle(); …Run Code Online (Sandbox Code Playgroud) 因此,我有std::string一个由C样式函数填充的对象,例如strcpy。该函数可以返回10-100个字符之间的任意位置,因此我在字符串中保留了100个字符。
但是使用&buf[0]作品,但是当我尝试时shrink_to_fit(),字符串被破坏了。如何避免这种情况?
std::string buf;
buf.reserve(100);
//example of the function that can write to a buffer with 10-100 characters.
strcpy(&buf[0], "Hello");
buf.shrink_to_fit();
std::cout << buf << std::endl;
Run Code Online (Sandbox Code Playgroud) 我有这个程序:
package main
import (
"fmt"
"time"
)
var ch1 = make(chan int)
var ch2 = make(chan int)
func f1() {
select {
case <-ch1:
fmt.Println("ch1")
}
}
func f2() {
select {
case <-ch2:
fmt.Println("ch2")
}
}
func main() {
go f1()
go f2()
time.Sleep(2 * time.Second)
fmt.Println("no buffered channel will wait?")
ch1 <- 1
ch2 <- 2
fmt.Println("main exits")
}
Run Code Online (Sandbox Code Playgroud)
我想到的是,只要F1和F2不显示任何信息,这意味着CH1和CH2具有里面什么都没有,所以ch1<-1和ch2<-2应该阻止?
但是当运行时,它会打印:
no buffered channel will wait?
main exits
Run Code Online (Sandbox Code Playgroud)
为什么那些无缓冲通道ch1,并ch2没有阻止内主? …
在C中,我有一个简单的服务器/客户端UDP套接字编程示例.客户端以高速率向服务器发送数据包,而服务器读取每个传入的消息并将其发送回客户端.客户端永远不会读取任何传入的消息.
有没有理由相信发送回客户端的数据包会填满客户端的缓冲区?如果客户没有阅读任何内容,他们究竟会发生什么?它们会立即被丢弃吗?
如何阅读unit8从[]byte而不创建bytes.Buffer。该值已像这样写入缓冲区,
buf := new(bytes.Buffer)
binary.Write(buf, binary.BigEndian, uint32(1))
binary.Write(buf, binary.BigEndian, uint8(1))
b := buf.Bytes()
Run Code Online (Sandbox Code Playgroud)
在解码时,它可以很容易地完成uint32,如下所示......
len := binary.BigEndian.Uint32(b[:4])
Run Code Online (Sandbox Code Playgroud)
但是对于uint8,检索我能想出的值的唯一方法是创建一个缓冲区,然后读取第一个字节,
buf := new(bytes.Buffer)
_, err := buf.Write(b[4:5])
// error handling ...
id = buf.ReadByte()
Run Code Online (Sandbox Code Playgroud)
encoding/binarypkg 中似乎没有用于uint8值检索的方法。我想这背后可能有一些很好的理由。
问题:有没有其他方法可以uint8在[]byte不创建Buffer??