在c中编辑字符串数组
Editing an array of strings in c
我正在为扑克游戏编写代码,在我的 main 函数中我有:
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] = { "[=10=]" };
shuffle(deck);
deal(deck, faces, suits, hand);
for (int i = 0; i < 5; i++) {
printf("%s", hand[i]);
}
这是我的一般问题所在。 hand 不会打印出交易中赋予它的值,即 5 张牌。
shuffle() 简单地洗牌,没有错误,所以我不打算把它包括在这个问题中。
deal() 有以下代码(忽略 curly-bracket/whitespace 的差异,我还在调整这个网站的格式):
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() 中,手上的值打印正常。我假设我没有正确地将 hand 传递给函数,但是无论我尝试使用不同的方法使程序正确地 运行 ,都没有任何效果。
可以在此处看到程序的示例:
Example of program running
在你deal()
函数中:
hand[card - 1] = str;
str
是本地字符数组,一旦您从 deal()
return 其地址将失效
正确的方法是为 hand
的每个元素(最大元素数为 5)分配内存,然后使用 strcpy
将 str
的值复制到 hand
的元素中
例如
hand[card - 1] = malloc(26);
strcpy(hand[card - 1],str);
我正在为扑克游戏编写代码,在我的 main 函数中我有:
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] = { "[=10=]" };
shuffle(deck);
deal(deck, faces, suits, hand);
for (int i = 0; i < 5; i++) {
printf("%s", hand[i]);
}
这是我的一般问题所在。 hand 不会打印出交易中赋予它的值,即 5 张牌。
shuffle() 简单地洗牌,没有错误,所以我不打算把它包括在这个问题中。
deal() 有以下代码(忽略 curly-bracket/whitespace 的差异,我还在调整这个网站的格式):
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() 中,手上的值打印正常。我假设我没有正确地将 hand 传递给函数,但是无论我尝试使用不同的方法使程序正确地 运行 ,都没有任何效果。
可以在此处看到程序的示例: Example of program running
在你deal()
函数中:
hand[card - 1] = str;
str
是本地字符数组,一旦您从 deal()
return 其地址将失效
正确的方法是为 hand
的每个元素(最大元素数为 5)分配内存,然后使用 strcpy
将 str
的值复制到 hand
的元素中
例如
hand[card - 1] = malloc(26);
strcpy(hand[card - 1],str);