#include<string.h>
#include<stdio.h>
int main()
{
char *p;
strcpy(p,"hello world");
}
那么,它是显示undefined behaviour
还是它指向你好世界?我见过很多程序员都使用这种sytax。我知道它比一个你不知道string大小的数组更好。但是在编程中使用它是否很好。任何人都可以解释它?
答案 0 :(得分:4)
这是未定义的行为,因为p
未初始化。我不认为你真的看到很多人这样做......
strcopy
需要一个足够长度的缓冲区来复制第二个参数的内容。您的示例是有意设计的,但在实际代码中,您需要知道source_string
的大小才能分配缓冲区。
答案 1 :(得分:2)
您没有初始化p
,因此行为明确未定义。如果您初始化p
以指向具有足够空间来容纳字符串的区域,或者您将strcpy()
)"hello world"
分配给p
(从而将其指向该区域在存储文字字符串的初始化程序存储器中,或者使用strdup()
而不是strcpy()
,它将起作用。
答案 2 :(得分:1)
我见过很多程序员 使用这种语法。
我对此表示怀疑。也许有一些语法,但没有这些语义,即没有'p'指向一个足够大的内存区域来保存字符串,包括它的尾随空字节。
答案 3 :(得分:1)
您发布的代码完全错误,可能会导致您的程序崩溃,很难想象您会经常看到这样的代码。
您更有可能看到以下代码。
int main()
{
char *p = (char*)malloc(20);
strcpy(p, "hello world");
free(p);
}
答案 4 :(得分:1)
您不必分配和复制来获取字符串。您可以让编译器为您完成所有工作:
char p[] = "Hello world!";
它甚至可以计算出阵列的正确尺寸!
答案 5 :(得分:0)
p未初始化并且向其复制任何内容将产生Segmentation Fault
和不可预测的结果,因为代码未指定p指向的内存中的位置。
在将字符串复制到p之前,必须指定p指向的内存。
你应该使用char [Buffersize];
例如char [12];