有关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结尾,或者您需要用strncpy
或memcpy
替换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循环毫无意义
基本上,这个程序看起来像一个没有线索的人复制粘贴。