2013-07-06 52 views
0

我正在学习如何使用结构来尝试制作纸牌游戏。我一直在搞这个事情大概是永远的,我无法让printf语句按照我的想法工作。我认为这与cc2没有正确地分配到ctwo.typ有关,但我真的不知道该怎么做。尝试从结构体打印字符串时运行失败

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

typedef struct 
{ 
    char typ[20]; 
    int num; 
} card; 

int main(void) 
{ 
    char cc2[] = "Two of Clubs"; 

    card ctwo; 
    ctwo.typ[20] = *cc2; 
    ctwo.num = 2; 

    //The output of the following is "Two of Clubs" 
    printf("%s\n", cc2); 

    //The output of the following is "2, " 
    printf("%i, %s\n", ctwo.num, ctwo.typ); 

    //The output of the following is "2, (null)" 
    printf("%i, %s\n", ctwo.num, ctwo.typ[0]); 

return 0; 
} 
+2

此行:ctwo.typ [20] = * cc2; 是非常错误的。想想那条线。 –

+0

是的,思考........这是你应该花一些时间,而不是随机尝试的地方。 :) – 0decimal0

+0

太局部化是这类问题的一个有用的密切原因。这不是一个无效的问题,但它并没有为任何其他人提供任何惊人的洞察力 - 它只是混淆搜索。哦,好吧... –

回答

3

你不能在C数组分配

必须复制的字符,使用标准库函数strcpy()

card ctwo; 
strcpy(ctwo.typ, "Two of Clubs"); 
ctwo.num = 2; 

由于实际的字符串是不变的(卡不会更改名称),还可以将其声明为struct中的普通const char *typ;,并将指针设置为字符串文字:

card ctwo; 
ctwo.typ = "Two of Clubs"; 
ctwo.num = 2; 

这并不复制的实际字符,它是所有分配哪些在存储器“的地方”的存在是为了在ctwo结构实例的指针变量字符数组的地址。

+1

哦,我的上帝。我感到很傻。案件关闭,带出舞龙虾。非常感谢。 – Bluesroo

+0

不客气。 :) – unwind

2

有几个问题,你不能分配到一个数组,你需要使用strcpy,这个:

ctwo.typ[20] = *cc2; 

应该是:

strcpy(ctwo.typ, cc2) ; 

printf

printf("%i, %s\n", ctwo.num, ctwo.typ[0]); 

应该是:

printf("%i, %s\n", ctwo.num, ctwo.typ); 

ctwo.typ[0]仅仅是第一个字符,但你需要一个char *,当您使用%sformat specifier它期待一个指向一个C风格的字符串,它是一个char数组,它是null(结束了\0)。如果要打印单个字符,则可以使用%c格式说明符,然后ctwo.typ[0]将有效。

+0

你能解释一下“你需要一个char *'”多一点吗?我不认为数组是指针,他们呢? – 0decimal0

+1

@PHIfounder好点,修改。 –

相关问题