Редактирование массива строк в c
Я пишу код для игры в покер и в своей основной функции я имею:
const char *suits[4] = { "Spades", "Clubs", "Hearts", "Diamonds" };
const char *faces[13] = { "Ace", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King" };
int deck[4][13] = { 0 };
srand((unsigned)time(NULL));
char *hand[5] = { "\0" };
shuffle(deck);
deal(deck, faces, suits, hand);
for (int i = 0; i < 5; i++) {
printf("%s", hand[i]);
}
Вот где моя общая проблема. Рука не распечатает значения, данные ему в сделке, которые составляют 5 карт.
shuffle () просто перетасовывает колоду, там нет ошибок, поэтому я не собираюсь включать ее в этот вопрос.
У сделки () есть следующий код (игнорируйте несоответствия между фигурными скобками и пробелами, я все еще подстраиваюсь под форматирование этого сайта):
void deal(const int wDeck[][13], const char *wFace[], const char *wSuit[],
char *hand[]) {
int row = 0; /* row number */
int column = 0; /*column number */
int card = 0; /* card counter */
/* deal 5 of the 52 cards */
for (card = 1; card <= 5; card++)
{
/* loop through rows of wDeck */
for (row = 0; row <= 3; row++)
{
/* loop through columns of wDeck for current row */
for (column = 0; column <= 12; column++)
{
/* if slot contains current card, deal card */
if (wDeck[row][column] == card)
{
char str1[10];
strcpy(str1, wFace[column]);
char str2[10];
strcpy(str2, wSuit[row]);
char str3[6] = " of ";
char str[26] = "";
strcat(str, str1);
strcat(str, str3);
strcat(str, str2);
puts(str);
hand[card - 1] = str;
printf("%s\n", hand[card - 1]);
}
}
}
}
}
Код в операторе if работает просто отлично. Проблема возникает в main(), когда я пытаюсь напечатать значения, переданные вручную, однако в deal() значения, напечатанные вручную, печатаются нормально. Я предполагаю, что я не передаю руку в функцию правильно, но, несмотря на различные методы, которые я пытался заставить программу работать правильно, ничего не работает.
Пример программы, как есть, можно увидеть здесь: Пример выполнения программы
1 ответ
В тебе deal()
функция:
hand[card - 1] = str;
str
это локальный массив символов, адрес которого будет признан недействительным, как только вы вернетесь из deal()
Правильный способ сделать это будет выделять память для каждого элемента (максимальное количество элементов 5) hand
, затем скопируйте значение str
с помощью strcpy
в элемент hand
например
hand[card - 1] = malloc(26);
strcpy(hand[card - 1],str);