簡體   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