Присвоение значения char в одном массиве значению char в другом массиве - PullRequest
0 голосов
/ 02 марта 2010

Звучит легко, но у меня есть ошибка, и я не уверен, что ее вызывает?

nopunccount = 0;
char *ra = new char[sizeof(npa)];
while (nopunccount <= strlen(npa)) {
    ra[nopunccount] = npa[strlen(npa) - nopunccount]; 
    nopunccount++;
}

ra никогда не получает значения в него, и я убедился, что npa имеет значения char для предоставления в диапазоне nopunccount.

Любая помощь приветствуется //:)

Ответы [ 2 ]

4 голосов
/ 02 марта 2010

nopunccount начинается с 0, поэтому на первой итерации цикла символ, присвоенный ra[0], равен npa[strlen(npa)]. Это завершающий '\0' этой строки. Таким образом, результирующая строка в ra начинается с '\0' и поэтому считается, что она заканчивается в этом первом байте обычными строковыми функциями.

2 голосов
/ 02 марта 2010

Как выглядит объявление npa? Если это указатель, sizeof(npa) будет размером указателя, а не выделенным размером. Если это строки с нулевым символом в конце (также известные как «C-строки»), используйте strlen, а не sizeof. Если это не строки, вам нужно отследить, сколько вы выделили в отдельной переменной.

У меня есть некоторые другие критические замечания по этому коду, возможно, не связанные с вашей проблемой.

while (nopunccount <= strlen(npa)) {

strlen - операция O (n). Этот код будет проходить строку npa в каждой итерации цикла. Лучше всего рассчитать длину только один раз.

   ra[nopunccount] = npa[strlen(npa) - nopunccount];

Та же проблема здесь.

...