为什么以下法典发挥作用:
char *p;
p="hello";
printf("%s
",p);
虽然如此,
char *p;
strcpy(p,"hello");
printf("%s
",p);
我知道,在第二例中增加p=malloc(4)将使守则发挥作用,但这正是我的问题。 为什么在第二个例子中需要小额保险,而不是第一个例子?
我对关于SO的类似问题作了研究,但没有回答。
为什么以下法典发挥作用:
char *p;
p="hello";
printf("%s
",p);
虽然如此,
char *p;
strcpy(p,"hello");
printf("%s
",p);
我知道,在第二例中增加p=malloc(4)将使守则发挥作用,但这正是我的问题。 为什么在第二个例子中需要小额保险,而不是第一个例子?
我对关于SO的类似问题作了研究,但没有回答。
<代码>p为查询人。 您需要指出thing。 在第一个案件中,
p = "hello";
http://www.un.org/Depts/DGACM/index_french.htm
在您的二例中,您确实指出“条形状”(>p>/ 编号)是任何内容,这样就在什么地方发现“条形”(>p>/ 编号)无效。
p = malloc(some_size);
http://www.un.org/Depts/DGACM/index_french.htm 如果你保留足够的话,你可以做如下事情:strcpy(p,“hello”)
是因为p<>。 确实是一个有效的记忆区,因此,通过<代码>p
复制为之。 注:some_size
至少必须像你想要复制的一样大,包括<编码> string terminator。
指出:
p = "hello";
strcpy(p, "bye");
由于<代码>
<代码>p=“hello”; 指明字面“hello”地址至p
,而scanf
则需要一个位置来提供扫描材料,因此,你需要为之分配一些记忆(静态、动态或自动)。
strcpy(p,"hello");
关于打字字字字面<代码>hello, 即copied,p必须注明一个有效的记忆地点,在此情况下为t。
由于<代码>p的价值是随机的,任何复制该编码的企图都将造成坠毁。 通过使用小型用户,确保<代码>p的数值为制作复印件(只要缓冲量大得多)
"hello"
is a string literal and will live in part of your output program. The memory is allocated by the compiler, at compile time, in the same place as the actual code*
也就是说,<代码>hello>的类型为const char[6]
,自动改为char *
。 (Using const char*
und char*
for stringlichs is a good habit to goging
在第二种情况下,<代码>p在请上strcpy
时,即为无内证,因此结果没有界定。 p= Smalloc(4)>
is not sufficient to fix this or, the string "hello" is made of 6 natures - 5 from the term hello se +