Застрял с нулевым указателем и проверкой пустой строки - PullRequest
0 голосов
/ 17 декабря 2018

Я новичок в C и программировании.Я пытался создать заглавную программу, но я должен сделать проверку нулевого указателя и проверку пустой строки.Как я мог продолжить?я просто хочу это понять.

#include <stdio.h>    
#include <stdlib.h>

int *toUpper(char *str)
{
    int i;
    for (i = 0; i < strlen(str); i++) {
        if (str[i] >= 'a' && str[i] <= 'z') {
            str[i] = str[i] - 'a' + 'A';
        }
    }
    return str;
}

int main(int argc, char **argv)
{
     for (int i = 1; i < argc; ++i)
     {
         printf(toUpper(argv[i]));
     }

}

1 Ответ

0 голосов
/ 17 декабря 2018

Прежде всего, позвольте мне сказать вам, если вам не нужно преобразование формата (с использованием спецификаторов преобразования), используйте puts() вместо printf().

При этом вам необходимо проверитьдве вещи для вашей toUpper() функции:

  1. Необходимо проверить, является ли входящий аргумент нулевым указателем или нет, прежде чем получить доступ.Вы можете проверить входящий указатель на NULL, например

    int *toUpper(char *str){
        if (str) {             //makes sure `str` is not a NULL pointer
          // do operation
         }
          // else 
         return NULL;      //indicate error condition
     }
    
  2. Необходимо проверить, не является ли предоставленная строка не пустой.Для этого вы можете проверить, является ли первый элемент NUL или нет, используя:

    int *toUpper(char *str){
        if (str) {
           if (str[0] != '\0')     // check the first element
          // do operation
         }
          // else 
         return NULL;      //indicate error condition
     }
    
...