我需要你的帮助!
为什么在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
答案 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)
根据你的问题。
< >
代替" "
我不认为,C允许数组像Java那样声明。
char name[] = " ";
而不是char []name=" ";
*name
只是一个指针。