首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能将"*const char *“类型的值分配给"char *”类型的实体

不能将"*const char *“类型的值分配给"char *”类型的实体
EN

Stack Overflow用户
提问于 2018-06-23 05:50:52
回答 3查看 8.3K关注 0票数 1

所以我尽量避免使用字符串。我基本上是想做一个字符串数组。

代码语言:javascript
复制
char **hourtimes = (char**)malloc(100 * sizeof(char*));

    for (int i = 0; i < 100; i++) {
        (*hourtimes) = (char*)malloc((100 * sizeof(char)));
    }

所以我基本上在这里做了一个字符串数组

现在,我想让hourtimes[0] = "twelve"

我试着做*hourtimes = "twelve";

但我得到了相同的错误,我认为这在c中是有效的,但我使用的是c++

hourtimes[0][0] = 't'; hourtimes[0][1] = 'w';

etc工作正常,但那太麻烦了

EN

回答 3

Stack Overflow用户

发布于 2018-06-23 05:55:40

*hourtimes = "twelve"正在将*hourtimes设置为指向不可变的字符串文字。然后,您将尝试修改那个不可变的字符串。你要做的就是把“十二”复制到*小时。

代码语言:javascript
复制
strcpy(hourtimes[0],"twelve");

注意:这个答案是在问题被标记为C的时候写的。C++会有不同的首选方法来做这类事情。

票数 4
EN

Stack Overflow用户

发布于 2018-06-23 06:18:45

在您的分配循环中,(*hourtimes)hourtimes[0]相同,因此您在每次循环迭代中将分配的子数组分配给主数组中的同一插槽,这会导致内存泄漏和未初始化的插槽。您需要改用hourtimes[i]

代码语言:javascript
复制
char **hourtimes = (char**)malloc(100 * sizeof(char*));

for (int i = 0; i < 100; i++) {
    hourtimes[i] = (char*)malloc(100 * sizeof(char));
}

使用完数组后,不要忘了释放它们:

代码语言:javascript
复制
for (int i = 0; i < 100; i++) {
    free(hourtimes[i]);
}

free(hourtimes);

现在,字符串文字的类型为const char[N],其中N是文字中的字符数,+1表示空终止符。所以"twelve"应该是一个const char[7]

您的数组只允许存储char*指针,但是const char[N]会衰减为指向第一个charconst char*指针。不能将const char*赋值给char*,因此会出现编译器错误。

即使可以这样做(确实可以,但只能通过类型转换),您也不应该这样做,因为这样做会导致内存泄漏,因为您会丢失指向已分配数组的原始指针,而且更糟糕的是,free()无论如何都不能释放字符串文字。

您真正想要做的是将字符串文字的内容复制到分配的数组存储中。您可以使用strncpy()来实现此目的:

代码语言:javascript
复制
strncpy(hourtimes[0], "twelve", 100);

现在,说到这里,这是处理字符串数组的C方法。C++的方式是使用std::vectorstd::string

代码语言:javascript
复制
#include <string>
#include <vector>

std::vector<std::string> hourtimes(100);
...
hourtimes[0] = "twelve";
票数 1
EN

Stack Overflow用户

发布于 2018-06-23 05:54:39

这是一个字符串文字,可以用作指向常量char的指针,但不能用作指向非常数字符的指针。

代码语言:javascript
复制
"twelve"

但是,您确实尝试将其赋给指向非常数字符的指针。

代码语言:javascript
复制
hourtimes[0] = "twelve";

这就是编译器所不喜欢的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50996014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档