如果字符为空,则打印null

时间:2014-10-02 16:51:17

标签: c pointers

我有一个用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的指针,这很好。我的问题是,当我当前运行它时,第一个print语句只是打印没有,是否有某种方式我可以使它打印&#34; NULL&#34;如果它回来了NULL?在打印之前,我不必检查NULL的每个返回值。

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

3 个答案:

答案 0 :(得分:1)

将%c更改为%s并返回文本字符串&#34; NULL&#34;。

答案 1 :(得分:1)

类似的东西:

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"));

答案 2 :(得分:0)

丑陋的东西:

#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