【问题标题】:C writing to string (specific function asked)C写入字符串(要求特定功能)
【发布时间】:2019-02-06 02:32:29
【问题描述】:

我有点急于搜索一个返回类型为 int 的特定函数,该函数通过恰好采用 5 个参数来更改 char 数组(字符串)的值,而该函数不得从任何其他库中导入,除了stdio.h 也许。

源代码如下所示:

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

  n= // some function here ;

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

我一直在研究许多功能,但我知道或发现没有一个符合上述要求,因此我现在很感激更多知识渊博的人的帮助。提前致谢。

【问题讨论】:

  • 这是作业还是测验什么的?问是因为这是一个奇怪的问题。
  • 为什么printf 中有额外的参数?什么是预期的输出?您可能正在寻找 fread,它需要 4 个参数。
  • sprintf 可能需要 5 个参数 ...
  • 您在寻找snprintf() 或其亲属之一吗?
  • 这是一个毫无意义的要求。请逐字引用您的作业。 printf("%s",buffer,n); 也没有多大意义。

标签: c string int


【解决方案1】:

您必须使用带有可变参数列表的函数。 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 个参数。

改变字符数组(字符串)的值

以下是你想要的字符数组(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);

【讨论】:

    【解决方案2】:

    略读Appendix B of the C Standard,我没有看到任何需要完全 5 个参数并返回int 的东西。

    OTOH stdio.h 充满了返回 int 并在 scanfprintf 系列中采用变量个参数的函数。一旦可以做某事。由于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 存在一个错误,即它传递了太多参数。也许这是一个线索,这应该是对Undefined Behavior的巧妙使用?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-17
      • 2021-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多