我该如何理解由两个字符串组成的数组?
static struct S1 {
char c[3], *s;
} s1 = {"abc", "def" };
也许我的问题不正确,但我很难理解它是如何工作的
S1.c
有 3 个字节的空间,S1.s
是一个指向字符串的指针。
第一部分定义了这个结构:
struct S1 {
char c[3], *s;
};
static struct S1 s1 = {"abc", "def" };
static 不是结构体定义的一部分,它指的是实例变量的可见性。
static
影响作用域、链接和生命周期,而不仅仅是作用域(可见性)。 - Eric Postpischil第一个初始化器"abc"
将这3个字符复制到成员char c[3]
中。由于没有空间用于字符串终止符,因此它是一个简单的数组,不能被视为字符串。
第二个初始化器"def"
将指针复制到成员char *s
中。它指向放置在只读内存中的字符串文字"def"
。它可以被视为字符串,但不能被修改。
{"abc", "def" }
不是一个数组。在这种情况下,它用于初始化结构体的实例。#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);
}
C99
的东西? - Neilstd::string
和std::cout
。 - Artyer
static struct S1 { char c[3], *s; } s1 = {"abc", "def" };
的内容,字符串总是以一个NUL字节结尾。所以这些3个字节的字符串实际上是4个字节。建议修改为:static struct S1 { char c[4]; char *s; } s1 = {"abc", "def" };
- user3629249