C 将字符串分配给指针
根据定义,在C语言中,字符串是一个字符数组C 将字符串分配给指针,c,C,根据定义,在C语言中,字符串是一个字符数组 int main() { char *name="David Bolton"; printf("My name is %s\r\n",name) ; return 0; } 行char*name=“David Bolton”将名称定义为指向字符串中第一个字符的指针,即“D”。因此,指针名称应该包含地址,但它会打印“David Bolton”为什么?原因是什么?因为它只包含D的地址为什么要打印整个字符串?在printf格式字符串中,%s说明
int main() {
char *name="David Bolton";
printf("My name is %s\r\n",name) ;
return 0;
}
行
char*name=“David Bolton”
将名称定义为指向字符串中第一个字符的指针,即“D”。因此,指针名称应该包含地址,但它会打印“David Bolton”为什么?原因是什么?因为它只包含D的地址为什么要打印整个字符串?在printf
格式字符串中,%s
说明符假定相应的参数是指向字符数据的指针。这正是name
的含义。格式说明符%s
指示printf
将指向的数据视为以空(零)字节结尾的字符数组。如果您想打印指针地址,请使用%p
。因为您使用%s
,C将知道您要打印字符串,因此,它将逐个字符打印到屏幕上,直到它遇到符号\0
,从指定给它的地址打印。因为%s
用于打印字符串,所以它从name
获取起始地址,并一直打印到\0
。如果您使用printf(“%p”,name)
它将为您提供存储在name
中的地址,即D
请参阅以阅读有关指针和数组的信息,C语言中的字符串用于确定以0结尾 “大卫·博尔顿” 内存映像:David Bolton\0 因此,地址指向可以在地址区域中显示指向0位置的指南 (例如)
但是名称是一个指针而不是字符串,其中包含地址。我是CW新手当您使用
%s
时,C将“理解”您想要打印字符串。字符串由字符组成。一个字符是2个字节。因此,它将使用第一个字符的地址来知道哪个字符,在本例中是name
,然后打印它,再加上2个字节,然后继续打印它。%s
说明符告诉printf
要聪明,在name
指向的地址打印字符串,而不是name
@hqt Nitpick的实际指针值:结束字节是\0
,而不是\o
@michaelb958 ah。我看起来o像o。是的,它是0
谢谢,我编辑过:)但是name是一个地址为D的指针,即使它打印它也应该打印D。Plz帮助我是c编程新手,我真的很头疼这个问题name
是一个指向字符串的指针“David Bolton”
。此字符串文字将存储在内存中链接器确定的地址。存储在name
中的地址指向字符串文本的第一个字节。但是name指向D,即使打印,也应该打印D,因为它没有其他字符的地址。它不知道其他字符的地址;它们立即跟随内存中的D
!当它到达字符串末尾标记(即0
字节)时,它停止打印。请始终查看手册页。它会给你你需要的答案。
void print_string(char *string){
while('\0'!=*string){
putchar(*string++);
}
}