2014-10-02 3 views
0

У меня есть функция, написанная на C, которая возвращает либо указатель на значение, либо null;Печать 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")); 

Так просто объяснить здесь, первый оператор печати возвращает нуль, так как HJI не в ABC, а вторая возвращает указатель на A, который является прекрасным. Мой вопрос в том, что когда я в настоящее время запускаю его, первый оператор печати просто ничего не печатает, есть ли способ, которым я могу заставить его печатать «NULL», если он возвращается NULL? Я бы предпочел не проверять каждое возвращаемое значение для NULL, прежде чем печатать его.

Редактировать: Я хотел бы сохранить его в соответствии между успехами и случаями отказа. Если я изменю% c на% s в случаях успеха, которые возвращают указатель, я получаю ошибку сегментации. Я также хотел бы вернуть что-то, что не выводит вывод в функцию.

+2

'return" NULL "'? – 0x499602D2

+0

'% c' но передать указатель? – HuStmpHrrr

+0

'char * function (char const * a, char const * b)'/'if (somethings are true)'/'* (указатель на что-то)' Пожалуйста, отправьте реальный код в будущем. – Qix

ответ

1

изменить% c на% s и вернуть текстовую строку «NULL».

+0

Я бы хотел, чтобы это соответствовало успеху и неудаче Если я изменю% c на% s в случаях успеха, которые возвращают указатель, я получаю ошибку сегментации – user3037172

+0

@ user3037172: тогда вы должны спроектировать функцию, чтобы быть последовательной.На данный момент вам кажется, что он хочет, чтобы он иногда возвращал указатель и символ «char» (несмотря на то, что подпись «функция char» (...) 'остальная часть времени. –

+0

Таким образом, возвращаемый тип char * также не может возвращаться null: он должен НИКОГДА не возвращать только символ. Он либо возвращает указатель, который будет передан в char, либо в NULL, теперь я редактирую его с полным кодом. – user3037172

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

Смежные вопросы