Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言:在嵌套结构中引用字符数组_C_Arrays_Pointers_Struct - Fatal编程技术网

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

C语言:在嵌套结构中引用字符数组,c,arrays,pointers,struct,C,Arrays,Pointers,Struct,我有一个8字节的密钥,其中一个额外的字节用于密钥中的空终止字符 struct KEY { char k[9]; }; 我有四把这样的钥匙 struct KEYS { struct KEY uk[4]; }; 我声明这些和一个指向akeys的指针: struct KEY akey; struct KEYS akeys; struct KEYS * pkeys = &akeys; 我想用指针pkeys将akeys中的所有键归零。 我尝试了以下方法: struct KEY zerokey

我有一个8字节的密钥,其中一个额外的字节用于密钥中的空终止字符

struct KEY { char k[9]; };
我有四把这样的钥匙

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
    }
struct-KEY-zerokey;
strcpy(zerokey.k,“00000000”);
对于(i=0;i<4;i++){
pkeys->uk[i]=zerokey;
printf(“key=%s”,pkeys->uk[i]);//错误:程序崩溃
}
我计划为键分配一个内存块,但我无法让这个简单的示例工作


为什么会失败?有更好的方法吗?我的结构是最好的方法吗?我想添加一个键,搜索一个键,然后使用指向KEYS结构的单指针将一个键归零

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

试一试


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

您使用的是
pkeys->uk[i]
这是结构键类型,但在printf中需要char*type,请改用
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); 
用这些线

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);   
       }
 }
#包括
#包括
结构键{chark[9];};
结构键{struct KEY uk[4];};
main()
{
int i=0;
结构键;
结构键*pkeys=&akeys;
结构键零键;
strcpy(zerokey.k,“00000000”);
对于(i=0;i<4;i++){
strcpy(pkeys->uk[i].k,zerokey.k);
printf(“key=%s\n”,pkeys->uk[i].k);
}
}

关于:
我计划为密钥调用一个内存块,但我无法让这个简单的示例工作
-您不必按照当前定义密钥的方式调用密钥块,即成员字符k[9];已为字符串分配了9个字节。如果您声明了char*k[9];,然后您将有一个指向字符串的指针数组,并且需要为您想要的9字节字符串数组分配指针。