Почему, если условие не работает?

0
           rc = daoMp.retrieveSystemData(argv[2]);
           printf("rc = %d\n");
           if (rc == 0) {
               ErrLog("Mount point found\n");
               printf("Mount point found\n");
               return 4;
           }
           else {
               ErrLog("Could not retrieve system data\n");
               printf("Could not retrieve system data\n");
               return -1;
           }

Output: rc = -208814497
Mount point found

Почему, если проверка блока не удалась?

  • 4
    посмотрите на ваш первый printf. внимательнее
  • 1
    Вы вызвали Undefined Behavior, которого лучше всего избегать, не используя в первую очередь дрянных, небезопасных вызовов в стиле C.
Показать ещё 3 комментария
Теги:
gcc

3 ответа

5
Лучший ответ

Вместо этого (который вы вызываете неправильно, один аргумент слишком короткий):

printf("rc = %d\n");

Сделай это:

std::cout << "rc = " << rc << '\n';

Таким образом, вы будете использовать правильный способ C++ сделать это (что сразу скажет вам что-то). printf() наследуется от C и по своей сути небезопасно - ваша ошибка является ярким примером того, почему.

  • 0
    Но C ++ - это расширенный набор C, поэтому я не думаю, что он будет работать. Любые намеки, пожалуйста?
  • 0
    @ kingsmasher1 1. C ++ не является надмножеством C. 2. Как я уже говорил в ответе, вы вызываете printf() с одним слишком коротким аргументом - вы на самом деле не передаете rc в функцию.
1

Я считаю, что у вас отсутствует второй параметр printf:

printf("rc = %d\n", rc);
0

printf("rc = %d\n"); должен быть printf("rc = %d\n", rc);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню