use*_*487 6 c arrays string pointers
您好我是这个网站的新手,我需要一些帮助来理解在C中编码需要字符串的结构时会被视为"规范"的内容.基本上我想知道在使用C中的结构来跟踪结构所需的所有内存时,下列哪种方式将被视为"行业标准":
1)固定尺寸字符串:
typedef struct
{
int damage;
char name[40];
} Item;
Run Code Online (Sandbox Code Playgroud)
我现在可以使用 sizeof(Item)
2)字符数组指针
typedef struct
{
int damage;
char *name;
} Item;
Run Code Online (Sandbox Code Playgroud)
我知道我可以存储name使用第二个变量的大小,但还有另一种方法吗?
i)使用固定尺寸是否有任何其他优势(1)
char name[40];
Run Code Online (Sandbox Code Playgroud)
与执行以下操作并使用指向char数组的指针(2)?
char *name;
Run Code Online (Sandbox Code Playgroud)
如果是的话,有什么好处?
ii)此外,字符串是否使用指向char数组(2)的指针将按顺序存储在结构之后(紧接在指向字符串的指针之后),还是存储在内存中的其他位置?
iii)我想知道如何找到char *字符串变量的长度(不使用a size_t或整数值来存储长度)
字符串基本上有3种常见约定.所有这三个都是在野外发现的,用于内存表示和存储/传输.
在第三种情况下,有一个功能,例如strlen搜索终结符并找到长度.
使用指针的两种情况都可以指向紧跟在结构的固定部分之后的数据,如果您以这种方式仔细分配它.如果要强制执行此操作,请在结构的末尾使用灵活的数组(不需要指针).像这样:
typedef struct
{
int damage;
char name[]; // terminated
} Item;
Run Code Online (Sandbox Code Playgroud)
要么
typedef struct
{
int damage;
int length_of_name;
char name[];
} Item;
Run Code Online (Sandbox Code Playgroud)