字符串和指针

时间:2011-07-04 05:05:30

标签: c pointers

#include<string.h>
#include<stdio.h>

int main()
{        
    char *p;         
    strcpy(p,"hello world");
}

那么,它是显示undefined behaviour还是它指向你好世界?我见过很多程序员都使用这种sytax。我知道它比一个你不知道string大小的数组更好。但是在编程中使用它是否很好。任何人都可以解释它?

6 个答案:

答案 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];