Несколько проблем с вашим кодом:
cout < charStr;
должно быть:
cout << charStr;
Если вы компилируете с аргументом g ++ -Wall (предупреждение всем), эта ошибка становится легко очевидной.
Кроме того, вы никогда не устанавливаете значение stringLength!Это один из примеров того, почему вы, как правило, не должны использовать глобальные переменные - их трудно отслеживать.Неустановленное значение stringLength может делать странные вещи в зависимости от вашего компилятора - многие компиляторы просто инициализируют значение 0, но некоторые устанавливают его на случайное значение.Это неопределенное поведение может вызвать серьезные головные боли, поэтому будьте очень осторожны с этим и старайтесь всегда инициализировать ваши переменные, когда это уместно (обычно это большая проблема с указателями, но проблема все еще может оставаться для других переменных).
Ниже приведена фиксированная программа:
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
static const char alphanum[] =
"0123456789"
"!@#$%^&*"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz";
int stringLength = sizeof(alphanum) - 1;
char genRandom()
{
return alphanum[rand() % stringLength];
}
int main()
{
while(true)
{
cout << genRandom();
}
return 0;
}
Все еще использую глобальные переменные, но я думаю, что это более правильное их использование.Я не уверен, чего вы пытались достичь, имея глобальную строку char *, просто головная боль, ожидающая и не приносящая никаких преимуществ в вашем коде.Обычно в C ++ лучше использовать строку стандартной библиотеки C ++, когда это возможно, хотя в этом случае вашему коду действительно не нужны строки.