2015-07-01 3 views
0

Я просто вхожу на C с предыдущим знанием кодирования RPG. Как и многие до меня, я смущен строками, массивами и указателями и как с ними работать.Печать заполненного массива строк отпечатков мусора

Я работаю над программой, которая берет имя, экваториальный радиус и полярный радиус планет из файла данных, а затем вычисляет и выводит объем, площадь поверхности.

Моя основная функция имеет следующие объявления:

double  equi_rad[iNumPlanets]; /* equitoral radii of planets */ 
double  pol_rad[iNumPlanets]; /* polar radii of planets */ 
char   *name[iNumPlanets]; /* array containing planet name */ 

(iNumPlanets уже инициализированы как 8)

Я затем вызвать функцию load:

load("radii.dat", equi_rad, pol_rad, iNumPlanets, name); 

нагрузки читает через файл в цикле и заполняет массивы. Я проверил, что это работает правильно внутри функции, поэтому, похоже, нет смысла копировать этот бит кода. Это прототип:

int load(const char* filename, double *equitoral_radii, double *polar_radii, const int iNumPlanets, char *planet_name[]); 

Назад в моей главной функции, то equi_rad и pol_rad массивы заполняются правильно и можно работать. Однако, когда я пытаюсь дополнить содержимое массива name, это просто случайный вздор.

Может кто-нибудь объяснить, почему я могу успешно изменить массивы double в функции, но не массивы строк?

+2

Не могли бы вы показать нам, как вы заселяете «имя»? –

+1

, а также то, как вы печатаете имя [index] – BigMike

+1

'Загрузка читает файл в цикле и заполняет массивы. Я проверял, что это работает правильно внутри функции, поэтому, похоже, нет смысла копировать этот бит кода. «Кажется, что это противоречит« Назад в моей основной функции, массивы equi_rad и pol_rad заполнены правильно и могут быть работал с. Однако, когда я пытаюсь напечатать содержимое массива имен, это просто случайный вздор. Кажется, что нам нужно увидеть код для 'load', а также содержимое' radii.dat' ... –

ответ

1

В моей основной функции массивы equi_rad и pol_rad равны , и они могут быть обработаны правильно. Однако, когда я пытаюсь передать значение массива имен, это просто случайный вздор.

Необходимо указать код. Угадайте, вы неправильно заполняете массив planet_name. Возможно, вам потребуется использовать malloc (например, planet_name[i] = malloc(LENGTH)) и скопировать там содержимое строки. Тогда у вас не должно быть проблем. например

planet_name[i] = malloc(strlen(sourceStr)+1); 
strcpy(planet_name[i], sourceStr); 

Не забудьте free каждый из указателей, для которого выделенные данные.

+1

Разве это не комментарий? –

+0

@ WeatherVane: Ну, я также разместил решение в ответ на очень * вероятную * проблему OP имеет –

+0

@WeatherVane: Это решение, основанное на очень близком предположении .. так хорошо – alk

Смежные вопросы