【问题标题】:Printing null if a character is null如果字符为空,则打印空
【发布时间】:2014-10-02 16:51:16
【问题描述】:

我有一个用 C 编写的函数,它返回指向值的指针或 null;

 char* function (char const *source char const *chars)
 {

  int size();
  int sizeSource = size(source);
  int charSource = size(chars);

    for (int i = 0; i < sizeSource; i++) 
    {
      for (int j = 0; j < charSource; j++) 
      {
          if (*(source + i) == *(chars + j)) 
          {
            return *(source + i);
          }
      }
    }
   return "NULL";

 }

该函数工作正常,我以这种方式调用它:

printf("%c\n", function("ABCDEFG", "HJI"));
printf("%c\n", function("ABCDEFG", "ABC"));

所以在这里解释一下,第一个 print 语句返回 null,因为 HJI 不在 ABC 中,第二个返回一个指向 A 的指针,这很好。我的问题是,当我当前运行它时,第一个打印语句什么也不打印,如果它返回 NULL,是否有某种方法可以让它打印“NULL”?我宁愿在打印之前不必检查每个返回值是否为 NULL。

编辑:我想在成功和失败案例之间保持一致。如果我在返回指针的成功案例中将 %c 更改为 %s,则会出现分段错误。我也想在函数中返回一些不打印输出的东西。

【问题讨论】:

  • %c 但是传入一个指针?
  • char* function (char const *a, char const *b) / if (somethings are true) / *(pointer to something) 以后请贴出真实代码。
  • 您不应将%cchar * 一起使用;它需要char,而不是指针。您的函数最好返回return *(pointer to pointer to something);,否则您将返回一个普通值(或任何东西)。目前,您的功能规范令人困惑,这可能就是您对这一切感到困惑的原因。
  • 那么你正在努力实现无法实现的目标。
  • “我有一个用 C 语言编写的函数,它返回 either...” 这就是问题所在。一个函数应该只返回一种类型。

标签: c pointers


【解决方案1】:

将 %c 更改为 %s 并返回文本字符串“NULL”。

【讨论】:

  • 我希望在成功和失败案例之间保持一致。如果我在返回指针的成功案例中将 %c 更改为 %s,则会出现分段错误
  • @user3037172:那么你必须将函数设计为一致。目前,您似乎希望它有时返回一个指针和一个char(尽管签名在其余时间都显示char *function(...)
  • 所以一个char *返回类型也不能返回null?它永远不应该只返回一个字符。它要么返回一个指向 char 或 NULL 的指针,我现在正在用我的完整代码编辑它。
  • 我完全误解了指针吗?如果我返回一个 char *(指向 char 的指针),那么我是否应该能够取消引用它以获取我指向的 char 值以及查看它存储的地址?
  • 如果你想取消它,那么你会做 printf("%c\n", *function("ABCDEFG", "HJI"));
【解决方案2】:

类似:

static void print_char_or_null(const char *s)
{
    if (s) {  /* you can use "if (s != NULL)" if you prefer */
        putc(*s, stdout);
    } else {
        printf("NULL");
    }
}

如果失败,将function 更改为返回NULL(不是"NULL")。

那么你可以这样做:

print_char_or_null(function("ABCDEFG", "HJI"));
print_char_or_null(function("ABCDEFG", "ABC"));

【讨论】:

    【解决方案3】:

    丑陋的东西:

    #define PRINT_CHAR_OR_NULL(pc) \
      printf((pc) ?"%c" :"%s", (pc) ?*(pc) :"NULL")
    
    ...
    
    char * p = <assign as per OP's requirements>
    PRINT_CHAR_OR_NULL(p);
    

    要使用它而不是"NULL",请返回NULL

    【讨论】:

      猜你喜欢
      • 2019-12-05
      • 1970-01-01
      • 2012-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-14
      • 2019-04-25
      相关资源
      最近更新 更多