c中的异常结构

时间:2019-01-05 20:23:11

标签: c struct

我应该如何理解两个字符串的数组?

FrameworkPropertyMetadata

这个问题可能不正确,但是我很难理解它的工作原理

4 个答案:

答案 0 :(得分:4)

S1.c有3个字节的空间,S1.s是指向字符串的指针。

第一部分定义结构:

struct S1 {
    char c[3], *s;
};

下一部分将创建此类型的实例,并使用一些值对其进行初始化:

static struct S1 s1 = {"abc", "def" };

static不是结构定义的一部分。它指的是实例变量的可见性。

答案 1 :(得分:2)

第一个初始化程序"abc"将这3个字符复制到成员char c[3]中。字符串终止符没有空间,因此它是一个简单的数组,不能视为字符串。

第二个初始化程序"def"将指针复制到成员char *s中。它指向放置在只读内存中的字符串文字 "def"。可以将其视为字符串,但不能修改。

答案 2 :(得分:1)

初始化器{"abc", "def" }不是数组。在这种情况下,它用于初始化该结构的实例。

答案 3 :(得分:1)

这不是相同的代码,但是可能有助于了解发生了什么,首先是不是数组。该结构包含2个元素。

#include <stdio.h>

struct S1 {
    char c[3];
    char* s;   
};

int main(void) {
    struct S1 s1 = { .c = "abc", .s = "def" };
    printf("s1.c: %.*s\n", 3, (char*) s1.c);
    printf("s1.s: %s\n", s1.s);
}