Я видел только один простой способ чтения произвольно длинной строки, но я никогда не использовал его. Я думаю, что это выглядит так:
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()
не рекомендуется для обработки пользовательского ввода. Он лучше всего применяется к базовым структурированным текстовым файлам, которые были созданы другим приложением. Даже тогда вы должны знать, что вход не может быть отформатирован так, как вы ожидаете, поскольку кто-то мог помешать ему попытаться сломать вашу программу.
Вот рабочая версия метода:
- (BOOL) writeToPasteBoard:(NSString *)stringToWrite
{
[pasteBoard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil];
return [pasteBoard setString:stringToWrite forType:NSStringPboardType];
}