在 C 中使用字符串初始化结构时,“从'char *'初始化'char' makes integer from pointer without a cast” [duplicate]

"initialization of ‘char’ from ‘char *’ makes integer from pointer without a cast" when initializing a struct with string in C [duplicate]

提问人:Lev Zagatov 提问时间:11/6/2023 更新时间:11/6/2023 访问量:79

问:

我有一个包含字符串值的结构:

struct Demo {
    char str[256];
};

当我尝试初始化结构时,如下所示:

char str[256] = "asdasdasd";
struct Demo demo = {str};
// print to check what's in there
puts(demo.str);

我收到警告:

warning: initialization of ‘char’ from ‘char *’ makes integer from pointer without a cast [-Wint-conversion]
    8 |         struct Demo demo = {str};
      |                             ^~~
.\Untitled-1.c:8:29: note: (near initialization for ‘demo.str[0]’)

为什么当结构需要包含字符串时,字符会初始化?demo.str[0]

C-字符串

评论

1赞 Some programmer dude 11/6/2023
只是不能使用另一个数组初始化一个数组。初始化结构的其余部分,然后复制字符串(使用 )。strcpy

答:

2赞 Ada 11/6/2023 #1

在 C 语言中,当您在表达式中使用数组名称时,它会“衰减”为指向其第一个元素的指针,因此您不能直接使用另一个数组初始化数组。您可以使用该函数将数组中的字符复制到:strcpystrdemo.str

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

struct Demo {
    char str[256];
};

int main() {
    char str[256] = "asdasdasd";
    struct Demo demo;
    strcpy(demo.str, str);

    puts(demo.str);

    return 0;
}

评论

2赞 nielsen 11/6/2023
另一种选择是直接使用字符串文字对其进行初始化,即 .struct Demo demo = {"asdasdasd"};