C语言:在嵌套结构中引用char数组

时间:2013-09-06 16:19:54

标签: c arrays pointers struct

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

2 个答案:

答案 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);   
       }
 }