结构C中的字符串字符串

时间:2017-02-19 14:18:14

标签: c string struct

我需要你的帮助! 为什么在C字符串中存储char字符串的数据仅适用于1种类型的声明char *name;有效,但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);
}

节目输出:

Robert
Woz
Robert
Woz

3 个答案:

答案 0 :(得分:2)

首先,要包含标准库标题,请使用<header.h>而不是"header.h"。使用引号时,编译器将尝试在文件目录中找到标头。使用<>时,编译器会在include目录中查找标题。

其次,使用括号的声明仅接受char name[];,而不接受char []name;。但是如果在结构中声明这种方式,则需要指定大小,如char name[30];。在声明单个变量并使用字符串文字初始化时,您只能声明没有大小,因此编译器将从字符串文字中推断出大小。示例:char name[] = "Robert";

第三,声明char* name与声明char name[30]的区别在于,第一种方式是在内存中声明指向一系列字符的指针,而在第二种方式中,您声明一个固定的大小数组。请注意,在初始化之后将固定大小的数组分配给较小的字符串文字(或更大)可能会导致错误,而分配char指针将允许您将其分配给任何大小的字符串文字。

答案 1 :(得分:0)

如果在结构中使用char name[],则编译器不知道char选项卡的大小。 这就是你必须在结构类型中使用指针的原因,或者你可以使用

结构类型中的

char name[MAX_SIZE];

但我建议使用指针:)

答案 2 :(得分:0)

根据你的问题。

  1. 标题文件引号。 < >代替" "
  2. 我不认为,C允许数组像Java那样声明。 char name[] = " ";而不是char []name=" ";

    *name只是一个指针。