Создание ac-файла для репозитория git

0

Я чрезвычайно новичок в Ubuntu и PuTTY и помещаю в него файл C++, но у меня проблема с моим C++ файлом. Мне нужна программа, которую нужно сделать, это взять строку, введенную с стороны Ubuntu, помещенную в программу C++ и подсчитать, сколько строк введено, и она отправляет обратно так:

./myfile Supplying arguments now
Argument #0: ./myfile
Argument #1: Supplying
Argument #2: arguments
Argument #3: now
Number of arguments printed: 4

Итак, когда я запускаю свою программу ниже, программа продолжается вечно, и я не могу ее преодолеть. Что вызывает его и почему и/или что я могу сделать, чтобы исправить эту проблему?

#include <stdio.h>
#include <iostream>
using namespace std;

int main(int argc, char *argv[])
{
    int count = 0;
    while (*argv[argc] != NULL)
    {
        count++;
    }
    cout << count << endl;
    system("PAUSE");
    return 0;
}
  • 1
    argc никогда не меняется, так что вы всегда находитесь над одним и тем же членом argv . Обратите особое внимание на код вашей записи.
  • 0
    Кроме того, используйте что-то вроде getc вместо вызова pause через систему.
Показать ещё 1 комментарий
Теги:
arrays
pointers

1 ответ

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

Ваш код является бесконечным циклом, потому что ваш во while цикла всегда проверяет то же условие. Это потому, что argc никогда не изменяется в вашем коде.

То, что вы хотели написать, while (*argv[count] != NULL). Однако то, что вы имели в виду, тоже неверно.

  1. C не проверяет границы массива. Когда вы читаете прошлое границы массива, вы не обязательно столкнетесь со значением 0. Вы будете читать случайные данные мусора, которые находятся в памяти в этом месте.
  2. Вам не нужно подсчитывать количество аргументов самостоятельно, потому что вы уже имеете его в переменной argc.

Поэтому лучшим решением для итерации всех аргументов командной строки является цикл for который увеличивает count от 0 до argc.

  • 0
    Отлично, я могу видеть, где я ошибся, я не мог пройтись по программе, которая действительно сделала это головной болью. Бесконечно благодарен!
  • 0
    Я вполне уверен, что сам argv[] заканчивается на NULL - т.е. argv[argc] == NULL . Не уверен, что это стандарт C, или Sus, POSIX, или что-то еще, хотя у меня нет различных документов, чтобы разобраться с этим. Возможно это не универсально верно ...

Ещё вопросы

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