Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.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 - Fatal编程技术网

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说明

根据定义,在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
说明符假定相应的参数是指向字符数据的指针。这正是
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++);
    }
}