Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.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_String_Struct - Fatal编程技术网

结构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

我需要你的帮助! 为什么在C语言中,存储在字符字符串中的数据结构只适用于一种类型的声明:
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