关于带有char数组的struct的问题

时间:2009-12-16 00:09:24

标签: c arrays data-structures

以下是我的代码段

struct encode
{

   char code[MAX];

}a[10];

int main()
{ 
char x[]={'3','0','2','5','9','3','1'};

  for(i=0;i<1;i++)
  {

      printf("%c",x[i]);

//This will printout like 3025931 now I want this to be stored in structure.         
  }

strcpy(a[0].code,x); 
// or 
a[0].code=x;//neither works

display();

}

void display()
{
printf("%c",a[0].code);
}

我希望输出如下:3025931。

由于不兼容的分配类型,我没有得到。请告诉我哪里出错了。

4 个答案:

答案 0 :(得分:2)

我在这里看到两个问题。第一个是strcpy的来源是a,其中可能应该是x

第二个是x不是以空值终止的。 C中的字符串是以空字符结尾的字符数组。

我会更改两行:

char x[] = {'3','0','2','5','9','3','1'};
strcpy(a[0].code, a);

为:

char x[] = {'3','0','2','5','9','3','1', '\0'};
strcpy(a[0].code, x);

这是一个完整的程序,可以提供你想要的东西(它实际上打印出两次数字,一次是在你的内循环中逐个字符,一次是printf,这样你就可以看到它们是相同的) :

#include <stdio.h>
#include <string.h>
#define MAX 100
struct encode {
    char code[MAX];
} a[10];

int main() {
    int i, j;
    char x[] = {'3','0','2','5','9','3','1','\0'};

    for(i = 0; i < 1; i++) {
        for(j = 0; j < 7; j++) {
            printf("%c", x[j]);
        }
        printf("\n");

        strcpy(a[0].code, x);
    }
    printf("%s\n",a[0].code);
    return 0;
}

根据评论进行更新:

  

对不起我是C的新手。我很抱歉没有在开头正确粘贴代码片段:“printf(”%c“,a [0] .code);”不显示“3025931”。

不,它不会。这是因为a[0].code是一个字符数组(在本例中为字符串),您应该使用"%s"而不是 "%c"。更改printf中的格式说明符应该可以解决该特定问题。

答案 1 :(得分:0)

下面,

strcpy(a[0].code, a);

你是说

吗?

strcpy(a[0].code, x);

...

此外,x需要以空终止,或者您需要将strcpy替换为strncpymemcpy并传入一段长度。

答案 2 :(得分:0)

这一行没有多大意义:

   strcpy(a[0].code, a);

也许你想要这个:

    memcpy(a[0].code, x, sizeof x);
    a[0].code[sizeof x] = '\0';

(第二行是必要的,以终止code,使其成为正确的C字符串。)

答案 3 :(得分:0)

你的程序中有很多错误。最令人不快的是:

strcpy(a[0].code, a); 

但也存在其他奇怪之处,例如

  • 永远不会调用显示
  • a仅被分配(种类),但从未读过(除了在显示中,从未被调用)
  • i循环毫无意义

基本上,这个程序看起来像是一个没有线索的人复制粘贴的。