#include<string.h>
#include<stdio.h>
int main()
{
char *p;
strcpy(p,"hello world");
}
那么,它显示undefined behaviour
还是它指向hello世界?我见过很多使用这种类型的sytax的程序员。我知道它比一个你不知道字符串大小的数组更好。但是,在编程中使用它会很好吗?任何人都可以解释它?字符串和指针
#include<string.h>
#include<stdio.h>
int main()
{
char *p;
strcpy(p,"hello world");
}
那么,它显示undefined behaviour
还是它指向hello世界?我见过很多使用这种类型的sytax的程序员。我知道它比一个你不知道字符串大小的数组更好。但是,在编程中使用它会很好吗?任何人都可以解释它?字符串和指针
p未初始化并将任何内容复制到它将产生Segmentation Fault
和不可预知的结果,因为p指向的内存中的位置未由代码指定。
在将字符串复制到p之前,必须指定p指向的内存。
你应该使用char [Buffersize];
例如char [12];
或'char [12]'=) –
你没有初始化p
,这样的行为是明确的定义。如果将p
初始化为指向一个有足够空间容纳字符串的区域,或者将p
指定为(不是strcpy()
)"hello world"
至p
(因此将其指向存储文字字符串的初始化程序存储器中的区域),或者使用strdup()
它会起作用,而不是strcpy()
。
感谢你的geeko向我介绍了新的strdup函数。 – cody
我见过很多使用这种语法的程序员 。
我对此表示怀疑。也许有一些这样的语法,但不包含这些语义,即不是没有'p'指向足够容纳字符串的内存区域,包括其尾部的空字节。
您发布的代码是完全错误的,可能会导致程序崩溃,而且很难想象您会经常看到类似的代码。
您更可能看到类似以下的代码。
int main()
{
char *p = (char*)malloc(20);
strcpy(p, "hello world");
free(p);
}
是你的权利乔纳森 – cody
您不必分配和复制来获取字符串。你可以让编译器为你做所有的工作:
char p[] = "Hello world!";
它甚至会计算出适当的数组大小!
当我尝试运行此操作时,出现段错误。它在运行时编译并失败。这我希望从一个未初始化的指针。 – ncmathsadist