[英]how to make two array strings into one array string in C
如何将2个数组的字符串变成1个数组的字符串,我可以在其中打印出所有52张扑克牌?
我的代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
int main() {
char deck[52];
char suits[] = {"Hearts","Diamonds","Clubs","Spades"};
char values[]= {"Ace","Two","Three","Four","Five","Six",\
"Seven","Eight","Nine","Ten","Jack",\
"Queen","King"};
int V, S, d = 0;
char string;
for ( S= 0; S <4; S++) {
for (V =0; V< 13; V++) {
string = strcat( values[V], suits[S]);
deck[d] = string;
printf("%s\n", string);//prints out all the 52 playing cards
d++;
}
}
return 0;
}
当我执行程序时,出现问题,要求我调试程序或关闭程序,最后我关闭程序,却什么也没有返回。 您能给我一个可行的答案吗?
检查下面的代码来修复代码中的问题:代码的问题是,您尝试在打印之前修改实际的字符串,因此,在下一个迭代中将修改字符串。 因此,只需复制值并适合数组,然后将其打印出来,如下所示。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
int main()
{
int i=0;
char deck[30] = "";
char suits[][30] = {"Hearts","Diamonds","Clubs","Spades"};
char values[][30]= {"Ace","Two","Three","Four","Five","Six",
"Seven","Eight","Nine","Ten","Jack",
"Queen","King"};
int V, S;
for ( S= 0; S <13; S++)
{
for (V =0; V< 4; V++){
memset(deck,0,sizeof(deck));/* Clear the buffer before writing new value*/
strcpy( deck, values[S]);
strcat(deck,suits[V]);
printf("%s\n", deck);//prints out all the 52 playing cards
i++;
}
}
printf("Number of playing cards: %d\n",i);
return 0;
}
strcat()
返回一个char *
,一个指向char
的指针,而不是char
。
您甚至不需要考虑strcat()
的返回值,因为假设已经分配了足够的内存,目标指针(第一个参数)现在将包含连接的字符串。
因此,在您的代码中,您尝试将连接的字符串放在values[V]
,当已经分配给它的内存不足时,这可能会失败。
最好的方法是分配一些内存(就像使用deck[]
)并将其全部设置为零。 然后在其中保留strcat()
。
strcat(deck, values[V]);
strcat(deck, suits[S]);
使用strcpy
和strcat
的替代方法是使用sprintf
。
#include<stdio.h>
#include<string.h>
#define NUM_SUITS 4
#define CARDS_PER_SUIT 13
#define TOTAL_CARDS (NUM_SUITS * CARDS_PER_SUIT)
int main()
{
char deck[TOTAL_CARDS][24];
char* suits[NUM_SUITS] = {"Hearts","Diamonds","Clubs","Spades"};
char* values[CARDS_PER_SUIT]= {"Ace","Two","Three","Four","Five","Six",
"Seven","Eight","Nine","Ten","Jack",
"Queen","King"};
int s, c, i;
for(s = 0; s < NUM_SUITS; s++)
{
for(c = 0; c < CARDS_PER_SUIT; c++)
{
sprintf(deck[(s * CARDS_PER_SUIT) + c], "%s of %s", values[c], suits[s]);
}
}
for(i = 0; i < TOTAL_CARDS; i++)
{
printf("%s\n", deck[i]);
}
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.