Запись строки к NSPasteBoard

Я видел только один простой способ чтения произвольно длинной строки, но я никогда не использовал его. Я думаю, что это выглядит так:

char *m = NULL;
printf("please input a string\n");
scanf("%ms",&m);
if (m == NULL)
    fprintf(stderr, "That string was too long!\n");
else
{
    printf("this is the string %s\n",m);
    /* ... any other use of m */
    free(m);
}

m между % и s сообщает scanf(), чтобы измерить строку и выделить для нее память, и скопировать строку в нее, и для сохранения адреса этой выделенной памяти в соответствующем аргументе. После того, как вы закончите с этим, вы должны free() его.

. Однако это не поддерживается для каждой реализации scanf().

Как указывали другие, самым простым решением является ограничение на длину ввода. Если вы все еще хотите использовать scanf(), вы можете сделать это следующим образом:

char m[100];
scanf("%99s",&m);

Обратите внимание, что размер m[] должен быть как минимум на один байт больше, чем число между % и s.

Если введенная строка длиннее 99, остальные символы будут ждать, чтобы их прочитал другой вызов или остальная часть строки формата, переданной в scanf().

Как правило scanf() не рекомендуется для обработки пользовательского ввода. Он лучше всего применяется к базовым структурированным текстовым файлам, которые были созданы другим приложением. Даже тогда вы должны знать, что вход не может быть отформатирован так, как вы ожидаете, поскольку кто-то мог помешать ему попытаться сломать вашу программу.

23
задан macinjosh 28 February 2009 в 20:09
поделиться

1 ответ

Вот рабочая версия метода:

- (BOOL) writeToPasteBoard:(NSString *)stringToWrite
{
    [pasteBoard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];
    return [pasteBoard setString:stringToWrite forType:NSStringPboardType];
}
34
ответ дан macinjosh 29 November 2019 в 00:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: