【问题标题】:Copy string to clipboard in c将字符串复制到c中的剪贴板
【发布时间】:2014-11-20 23:10:21
【问题描述】:

首先,我知道有一个同名的问题,但它处理的是 c++ 而不是 c。

有没有办法在c中设置一个字符串到剪贴板?

This is the mentioned question if anyone is curious, even though it is for windows.

我需要它在 c 中,因为我正在用 c 编写程序,并且我想将一个字符串复制到剪贴板。

printf("Welcome! Please enter a sentence to begin.\n> ");
fgets(sentence, ARR_MAX, stdin);   
//scan in sentence
int i;
char command[ARR_MAX + 25] = {0};
strncat(command, "echo '",6);
strncat(command, sentence, strlen(sentence));
strncat(command, "' | pbcopy",11);
command[ARR_MAX + 24] = '\0';
i = system(command); // Executes echo 'string' | pbcopy

上面的代码除了字符串之外还保存了 2 个新行。 ARR_MAX 为 300。

【问题讨论】:

  • 您链接到的问题是针对 Windows 的。您已经为 OS X 标记了您的问题。当然,这些是完全不同的。请澄清你的问题。另外,您能否解释一下为什么使用 C 语言很重要?
  • 我添加了一个简短的函数,它完全可以满足您的需求。不使用 strncat ,这对我来说似乎是迟钝的。

标签: c macos clipboard


【解决方案1】:

您为 osx 标记了您的问题。所以这应该足够了: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/PasteboardGuide106/Articles/pbCopying.html#//apple_ref/doc/uid/TP40008102-SW1

但是存在必须调用非本地 c 的问题。这是否直接可能我不知道。

如果您可以接受一些骇人听闻的行为,您可以调用 pbcopy 命令。

http://osxdaily.com/2007/03/05/manipulating-the-clipboard-from-the-command-line/

这很容易实现。这是一个应该复制到剪贴板的简短函数。但是我手边没有 osx,所以无法测试自己

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int copytoclipboard(const char *str) {

    const char proto_cmd[] = "echo '%s' | pbcopy";

    char cmd[strlen(str) + strlen(proto_cmd) - 1]; // -2 to remove the length of %s in proto cmd and + 1 for null terminator = -1
    sprintf(cmd ,proto_cmd, str);

    return system(cmd);
}

int main()
{
    copytoclipboard("copy this to clipboard");

    exit(0);
}

【讨论】:

  • 谢谢,这不是客观的吗?
  • 是的。我没有使用objective c的经验,因此无法真正提供更多关于如何将它与c一起使用的帮助。但我认为它是 c 的超集,所以如果幸运的话,它可能非常简单。
  • 所以你的答案归结为:改用objective-c,这里是官方文档的链接...
  • 并非如此。大多数语言都支持以一种或另一种方式与 c 交互。
  • 以前有一个Carbon Pasteboard Manager,是C,但是10.5天就消失了。您可以使用 Objective-C 运行时 API 获得 NSPasteboard 指针,该 API 也只是 C,但您至少需要 ObjC 运行时才能使函数工作。 OS X 附带的pbcopy 版本现在链接到Cocoa,因此Apple 也使用ObjC。使用 Swift!
猜你喜欢
  • 2010-11-18
  • 2013-11-21
  • 2010-10-09
  • 1970-01-01
  • 2010-10-28
  • 2018-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多