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

struct Demo {
    char str[256];
};

当我try 初始化 struct 时,如下所示:

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]’)

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

推荐答案

在C语言中,当您在表达式中使用数组名称时,它将"衰减"为指向其第一个元素的指针,因此您不能直接使用另一个数组来初始化array.您可以使用strcpy函数将字符从str数组复制到demo.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;
}

C++相关问答推荐

在#include中使用C宏变量

C中是否有语法可以直接初始化一个常量文本常量数组的 struct 成员?

使用NameSurname扫描到两个单独的字符串

特定闪存扇区的内存别名

我可以在C中声明不同长度数组的数组而不带变量名吗?

非正规化边缘毛刺

C-使用指针返回修改后的整数数组

struct -未知大小

使用错误的命令执行程序

链接到底是如何工作的,我在这里到底做错了什么

我在反转双向链表时遇到问题

Fprintf正在写入多个 struct 成员,并且数据过剩

用于计算位数和的递归C函数

Makefile无法将代码刷新到ATmega328p

C struct 中的冒泡排序

当另一个指向 const 的指针观察到数据时,通过指针更改数据是否安全?

使用 _Atomic float 时,MSVC 编译的代码会命中调试断言

使用fread()函数读取txt文件

仅使用其内存地址取消引用 C 中的 struct

如何在Linux上从控制台左上角开始打印文本?