有关char数组的struct的问题

下面是我的代码片段

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。

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

我在这看到两个问题。 第一个是strcpy的源是它可能应该是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  #include  #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的格式说明符应该可以解决该特定问题。

这里,

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

你的意思是

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

…?

此外, x需要以null结尾,或者您需要用strncpymemcpy替换strcpy并传入一个长度。

这条线没有多大意义:

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

也许你想要这个:

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

(第二行是必要的,以终止code ,使其成为一个合适的C字符串)。

你的程序中有很多问题。 最令人不快的是这样的:

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

但也有其他奇怪之处,例如

  • 永远不会调用display
  • a只分配(种类),但从不读取(显示中除外,从不调用)
  • i循环毫无意义

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