1

我有一个 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 结构的单个指针将一个键归零。

4

2 回答 2

3

pkeys->uk[i]是一个struct KEY,而不是一个指针。您正在将整个结构按值传递给printf,这可能试图将其解释为指针(结果不好)。

尝试

printf("key=%s\n", pkeys->uk[i].k);

将指针传递给包含的char数组。

于 2013-09-06T16:23:20.403 回答
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);   
       }
 }
于 2013-09-06T16:31:18.027 回答