C запись в строку (задается конкретная функция)


Я в некотором роде в затруднении с поиском одной конкретной функции с возвращаемым типом int, который изменяет значения массива char (string), принимая ровно 5 параметров, в то время как функция не должна быть импортирована из любой другой библиотеки, за исключением stdio.h, возможно.

Источник выглядит следующим образом:

#include <stdio.h>
int main() {
  char buffer [50];
  int n;

  n= // some function here ;

  printf("%s",buffer,n);
  return 0; 
}

Я изучал многие функции, но ни одна из них, о которой я знал или нашел, не соответствует вышеуказанному требованию, так что я был бы признателен за помощь более знающих людей. сейчас. Заранее спасибо.

2 3

2 ответа:

Вы должны перейти к функциям со списками переменных аргументов. Двумя такими в stdio.h являются:

int sprintf(char * restrict s, const char * restrict format, ...);
int snprintf(char * restrict s, size_t n, const char * restrict format, ...);
Примечание: эти функции точно не принимают пять аргументов, как вы указали в своем вопросе. Они принимают минимальное количество аргументов (2 и 3 соответственно), но могут выходить далеко за пределы 5 аргументов.

Который изменяет значения массива символов (string)

Следующее делает то, что вы хотите, чтобы char массив (info):

char info[60];
char name[] = "Christopher Westburry";
char designation[] = "Learner"; 
int reputation = 72;
sprintf(info, "Welcome %s to StackOverflow!\nDesignation: %s\nReputation: %d",
    name, designation, reputation);
printf("%s", info);

Просматривая приложение B стандарта C , я не вижу ничего, что занимает Вот именно 5 Аргументы и возвращает int.

OTOH stdio.h полон функций, которые возвращают int и принимаютпеременную число аргументов в семействе scanf и printf. Один раз можно что-то придумать. Поскольку buffer неинициализирован, и код хочет его напечатать, предположительно мы собираемся что-то прочитать в нем из stdin. Это, вероятно, означает, что некоторые надуманные scanf вызов.

#include <stdio.h>
int main() {
  char buffer [50];
  int n;

  // Same as
  // n = scanf("%40s", buffer);
  n = scanf(
      "%10s%10s%10s%10s",
      buffer,
      &buffer[10],
      &buffer[20],
      &buffer[30]
  );

  // printf("%s",buffer,n);
  printf("'%s' %d\n",buffer,n);
  return 0; 
}
Если это тот ответ, которого они ожидают, то это упражнение довольно бессмысленно. Обратите внимание, что printfв исходном коде имеет ошибку, когда он передается в слишком большом количестве аргументов. Может быть, это ключ, и это должно быть какое-то умное использование неопределенного поведения?