C запись в строку (конкретная функция спросила) - PullRequest
0 голосов
/ 31 августа 2018

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

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

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

  n= // some function here ;

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

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

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Вы должны использовать функции с переменными списками аргументов. Два таких в 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 аргументов.

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

Следующее делает то, что вы хотите для массива 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);
0 голосов
/ 31 августа 2018

Скимминг Приложение 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 в исходном коде содержит ошибку, в которой передается слишком много аргументов. Может быть, это ключ к разгадке, и предполагается, что это разумное использование Неопределенное поведение ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...