我有一个用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输出的东西。
答案 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
。