[英]Strings and pointers
#include<string.h>
#include<stdio.h>
int main()
{
char *p;
strcpy(p,"hello world");
}
那么,它是显示undefined behaviour
还是指向你好世界? 我见过很多程序员使用这种语法。我知道它比你不知道字符串大小的数组更好。但是在编程中使用它好么。谁能解释一下?
这是未定义的行为,因为p
未初始化。 我不认为你真的看到很多人这样做......
strcopy
需要一个足够长的缓冲区来复制第二个参数的内容。 您的示例是故意设计的,但在实际代码中,您需要知道source_string
的大小才能分配缓冲区。
您没有初始化p
,因此行为是明确未定义的。 如果将p
初始化为指向一个有足够空间来保存字符串的区域,或者将(不是strcpy()
) "hello world"
分配给p
(从而将其指向已初始化程序 memory 中存储文字字符串的区域) ,或者您使用strdup()
而不是strcpy()
,它将起作用。
我见过很多程序员使用这种语法。
我对此表示怀疑。 也许有一些语法,但不是这些语义,即不是没有'p'指向memory的区域,该区域足够大以容纳字符串,包括其尾随null字节。
您发布的代码是完全错误的,可能会使您的程序崩溃,很难想象您经常看到这样的代码。
您更有可能看到如下代码。
int main()
{
char *p = (char*)malloc(20);
strcpy(p, "hello world");
free(p);
}
您不必分配和复制来获取字符串。 您可以让编译器为您完成所有工作:
char p[] = "Hello world!";
它甚至会计算数组的正确大小!
p 未初始化并且向其复制任何内容将产生Segmentation Fault
和不可预测的结果,因为代码未指定 p 指向的 memory 中的位置。
在将字符串复制到 p 之前,您必须指定 p 指向的 memory。
你应该使用char [Buffersize];
例如char [12];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.