代码这样修改一下就能正确输出了
- #include<stdio.h>
- #include<string.h>
- int jishu();
- int main()
- {
- struct str
- {
- char a[20];
- int no;
- };
- char a[20]="a1", b[20]="b1", c[20]="c1", d[20]="d1", e[20]="e1", f[20]="f1";
- int sum1 = jishu(a);
- int sum2 = jishu(b);
- int sum3 = jishu(c);
- int sum4 = jishu(d);
- int sum5 = jishu(e);
- int sum6 = jishu(f);
- struct str d1;
- struct str z[6] = { { "a1", sum1 }, { "b1", sum2 }, { "c1", sum3 }, { "d1", sum4 }, { "e1", sum5 }, { "f1", sum6 } };
- printf("%s", z[0].a);
- return 0;
- }
- int jishu(char a[])
- {
- int sum = 0;
- for (int i = 0; i < strlen(a); i++)
- {
- sum = sum + a[i];
- }
- printf("%d\n", sum);
- return sum;
- }
复制代码
原因我测试了一下,是字符数组给字符数组间赋值出现了问题。
如果按照原来的赋值方式就是
struct str z[6] = { { a, sum1 }, { b, sum2 }, { c, sum3 }, { d, sum4 }, { e, sum5 }, { f, sum6 } };
虽然在语法上没错但是转换一下就成了如下所示
z[0] char a[20] = a;
int no = sum1;
z[1] char a[20] = b;
int no = sum2;
.........
..........
以此类推直到最后。
首先看到int no = sum1;这样赋值可以。但是char a[20] = a;这样赋值有错误。这样赋值编译可运行。但是a数组在初始化的时候接收到的只是a数组的首地址并不是将a数组赋值成“a1”。
|