C语言 为什么我会得到“数组初始化器必须是一个初始化器列表或字符串文字”的错误消息?

vfhzx4xs  于 2023-01-08  发布在  其他
关注(0)|答案(2)|浏览(331)

我编写了一个函数,它接收一个字符串,更新它,然后返回相同的字符串,但是做了一些更改。当我试图复制那个字符串以便将其更改为数组时,我得到了错误消息“数组初始化器必须是初始化器列表或字符串文字”。下面是我得到错误的地方:

string replace(string word)
{
    char updated[] = word;  // The error points out this line
}

>>> // error: array initializer must be an initializer list or string literal
//    char updated[] = word;
           ^

我试图创建一个字符数组,以便从字符串文字形成字符串。但是,它似乎不起作用。现在,我只想更好地了解字符数组如何工作以及为什么它不起作用。提前感谢!

hkmswyz6

hkmswyz61#

您需要将strcpy/memcpyword转移到updated,但还需要为updated分配内存(malloc)。
你的return不应该是一个string,它是cs50在程序退出时自动释放(通过一个atexit回调)的typedef for char*,因为你的手动分配不会自动释放。你应该返回一个char*,然后你再free

q7solyqu

q7solyqu2#

char updated[] = word;在C中无效,因为C语言没有构造函数。
您需要:

char updated[strlen(word) + 1];
strcpy(updated, word);

相关问题