结构C中的字符字符串
我需要你的帮助! 为什么在C语言中,存储在字符字符串中的数据结构只适用于一种类型的声明:结构C中的字符字符串,c,string,struct,C,String,Struct,我需要你的帮助! 为什么在C语言中,存储在字符字符串中的数据结构只适用于一种类型的声明:char*name工作,但char[]名称不起作用 但是当尝试在代码中声明一个字符字符串时(不使用struct),一切正常。代码示例演示了在什么时候声明char数组,这两种声明类型都有效 #include "funct.h" #include "stdio.h" //structure employee name and surname only works when using char* pointer
char*name代码>工作,但char[]名称代码>不起作用
但是当尝试在代码中声明一个字符字符串时(不使用struct),一切正常。代码示例演示了在什么时候声明char数组,这两种声明类型都有效
#include "funct.h"
#include "stdio.h"
//structure employee name and surname only works when using char* pointers
struct employee {
char *name;
char *surname;
};
int main() {
struct employee worker;
worker.name = "Robert";
worker.surname = "Woz";
printf("\n");
printf("%s", worker.name);
printf("\n");
printf("%s", worker.surname);
printf("\n");
char name[] = "Robert"; //declaration of array with using [] postfix
for (int i = 0; i < 7; i++) {
printf("%c", name[i]);
}
printf("\n");
char *surname = "Woz"; //declaration of array wit using char* pointer
for (int i = 0; i < 4; i++) {
printf("%c", surname[i]);
}
printf("\n");
return (0);
}
首先,要包含标准库标题,请使用
而不是“header.h”
。使用引号时,编译器将尝试在文件目录中查找标头。使用
时,编译器会在include目录中查找头
其次,使用括号的声明只接受charname[]代码>,而不是char[]名称代码>。但是如果在结构中以这种方式声明,则需要指定大小,如charname[30]代码>。在声明单个变量并使用字符串文字初始化它时,只能声明没有大小的变量,因此编译器将从字符串文字推断大小。示例:char name[]=“Robert”代码>
第三,声明char*name
与声明char name[30]
的区别在于,第一种方法是声明指向内存中字符序列的指针,而第二种方法是声明固定大小的数组。请注意,在初始化后将固定大小的数组分配给较小的字符串文字(或较大的字符串文字)可能会导致错误,而分配char
指针将允许您将其分配给任何大小的字符串文字。首先,要包含标准库标题,请使用
而不是“header.h”
。使用引号时,编译器将尝试在文件目录中查找标头。使用
时,编译器会在include目录中查找头
其次,使用括号的声明只接受charname[]代码>,而不是char[]名称代码>。但是如果在结构中以这种方式声明,则需要指定大小,如charname[30]代码>。在声明单个变量并使用字符串文字初始化它时,只能声明没有大小的变量,因此编译器将从字符串文字推断大小。示例:char name[]=“Robert”代码>
第三,声明char*name
与声明char name[30]
的区别在于,第一种方法是声明指向内存中字符序列的指针,而第二种方法是声明固定大小的数组。请注意,在初始化后将固定大小的数组分配给较小的字符串文字(或较大的字符串文字)可能会导致错误,而分配char
指针将允许您将其分配给任何大小的字符串文字。如果在结构中使用char name[]
,则编译器不知道char选项卡的大小。
这就是为什么必须在结构类型中使用指针,或者可以使用
char name[MAX_SIZE]代码>在结构类型中
但是我建议使用指针:)如果在结构中使用char name[]
,编译器不知道char选项卡的大小。
这就是为什么必须在结构类型中使用指针,或者可以使用
char name[MAX_SIZE]代码>在结构类型中
但我建议使用指针:)根据您的问题
头文件引号<代码><>
而不是“
我不认为C允许数组像Java那样声明。
字符<代码>名称[]=“”代码>而不是char[]name=“”代码>
*name
只是一个指针
根据你的问题
头文件引号<代码><>
而不是“
我不认为C允许数组像Java那样声明。
字符<代码>名称[]=“”代码>而不是char[]name=“”代码>
*name
只是一个指针
C还是C++?选择一个。char*姓氏
不声明数组;它声明了一个指针
创建静态生存期的字符串文本,并指定姓氏
指向它<代码>字符名[]=“Robert”
创建一个作用域为生存期的字符数组,数组与指针不同,因此数组有一些额外的信息,即它的大小,而指针不知道它指向多少内存。char[]name
->->应该是char name[size]
所以char*姓氏=“Woz”代码>为数组姓氏创建第一个char元素的指针,但是WHY决定存储姓氏的大小?C还是C++?选择一个。char*姓氏
不声明数组;它声明了一个指针
创建静态生存期的字符串文本,并指定姓氏
指向它<代码>字符名[]=“Robert”
创建一个作用域为生存期的字符数组,数组与指针不同,因此数组有一些额外的信息,即它的大小,而指针不知道它指向多少内存。char[]name
->->应该是char name[size]
所以char*姓氏=“Woz”
为数组姓氏的第一个字符元素创建指针,但何时确定存储姓氏的内存大小?但指针只是一个变量,它存储的内存地址与worker.Lastname存储的数组相比,具有一定数量的字符元素,何时为字符串保留内存?此时此刻:worker.name=“Woz”代码>?数组名是一个指针,它存储第一个数组元素的地址,或者不是?但指针只是一个变量,它存储的内存地址vs worker.nam姓氏存储的数组,具有一定数量的字符元素,什么时候为字符串保留内存?此时此刻:worker.name=“Woz”代码>?数组名是一个指针,用于存储
Robert
Woz
Robert
Woz