繁体   English   中英

字符串和指针

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM