繁体   English   中英

* char成为main和* char成为struct

[英]*char into main and *char into a struct

以下两个代码相似,但第一个具有结构,第二个没有。

为什么此代码有效(无警告)?

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

struct prova
{
    char *stringa;
};

int main()
{
    struct prova p;

    strcpy (p.stringa, "example\0");

    printf("%s\n", p.stringa);

    return 0;
}

但是以下代码不起作用?

Segmentation fault (core dumped)

带有此警告:

code.c: In function 'main': code.c:8:9: warning: 'stringa' is used uninitialized in this function [-Wuninitialized] strcpy (stringa, "example\\0");

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

int main()
{
    char *stringa;

    strcpy (stringa, "example\0");

    printf("%s\n", stringa);

    return 0;
}

谢谢!

都不正确,因为您将复制到未初始化变量指定的地址。 因此,这两个程序都调用未定义的行为。

程序之一有效的事实纯属偶然。 未定义行为的一种可能形式是您的程序正确运行。

您需要初始化指针以引用足够大的内存块。 例如:

char *stringa = malloc(8);

请注意,您无需在字符串文字中添加空终止符。 那是隐性的。 因此,鉴于此内存分配,您可以编写:

strcpy(stringa, "example");

您需要给字符串一些内存,以便将字符复制到其中。

使用malloc

除了第一个示例,不会编译。

当你写

struct prova {char * stringa; };

int main(){struct prova p;

strcpy (p.stringa, "example\0");

请注意,p.stringa特别指向无处,但您将其复制到该位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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