我有一个8字节的密钥,在KEY中有一个额外的字节用于空终止字符。
struct KEY { char k[9]; };
我在KEYS中有4个这样的键。
struct KEYS { struct KEY uk[4]; };
我声明了这些以及指向akeys的指针:
struct KEY akey;
struct KEYS akeys;
struct KEYS * pkeys = &akeys;
我想使用指针pkeys将akeys中的所有键清零。 我尝试了以下方法:
struct KEY zerokey;
strcpy(zerokey.k, "00000000");
for (i = 0; i < 4; i++) {
pkeys->uk[i] = zerokey;
printf("key=%s", pkeys->uk[i]); //error: crashes program
}
我打算为KEYS购买一块内存块,但我无法让这个简单的例子起作用。
为什么会失败?有一个更好的方法吗?我的结构是最好的方法吗?我想添加一个键,搜索一个键,并使用指向KEYS结构的单个指针将键清零。
答案 0 :(得分:3)
pkeys->uk[i]
是struct KEY
,不是指针。您将整个结构值按值传递给printf
,它可能试图将其解释为指针(结果不佳)。
尝试
printf("key=%s\n", pkeys->uk[i].k);
传递指向包含的char
数组的指针。
答案 1 :(得分:0)
您正在使用pkeys->uk[i]
这是struct KEY类型,但您需要在printf中使用char *类型,而是使用pkeys->uk[i].k
而不是这些行
pkeys->uk[i] = zerokey;
printf("key=%s", pkeys->uk[i]);
使用这些行
strcpy(pkeys->uk[i].k ,zerokey.k);
printf("key=%s\n", pkeys->uk[i].k);
试试这段修改后的代码:
#include<stdio.h>
#include<string.h>
struct KEY { char k[9]; };
struct KEYS { struct KEY uk[4]; };
main()
{
int i=0;
struct KEYS akeys;
struct KEYS * pkeys = &akeys;
struct KEY zerokey;
strcpy(zerokey.k, "00000000");
for (i = 0; i < 4; i++) {
strcpy(pkeys->uk[i].k ,zerokey.k);
printf("key=%s\n", pkeys->uk[i].k);
}
}