所以我尽量避免使用字符串。我基本上是想做一个字符串数组。
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工作正常,但那太麻烦了
发布于 2018-06-23 05:55:40
*hourtimes = "twelve"正在将*hourtimes设置为指向不可变的字符串文字。然后,您将尝试修改那个不可变的字符串。你要做的就是把“十二”复制到*小时。
strcpy(hourtimes[0],"twelve");注意:这个答案是在问题被标记为C的时候写的。C++会有不同的首选方法来做这类事情。
发布于 2018-06-23 06:18:45
在您的分配循环中,(*hourtimes)与hourtimes[0]相同,因此您在每次循环迭代中将分配的子数组分配给主数组中的同一插槽,这会导致内存泄漏和未初始化的插槽。您需要改用hourtimes[i]:
char **hourtimes = (char**)malloc(100 * sizeof(char*));
for (int i = 0; i < 100; i++) {
hourtimes[i] = (char*)malloc(100 * sizeof(char));
}使用完数组后,不要忘了释放它们:
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]会衰减为指向第一个char的const char*指针。不能将const char*赋值给char*,因此会出现编译器错误。
即使可以这样做(确实可以,但只能通过类型转换),您也不应该这样做,因为这样做会导致内存泄漏,因为您会丢失指向已分配数组的原始指针,而且更糟糕的是,free()无论如何都不能释放字符串文字。
您真正想要做的是将字符串文字的内容复制到分配的数组存储中。您可以使用strncpy()来实现此目的:
strncpy(hourtimes[0], "twelve", 100);现在,说到这里,这是处理字符串数组的C方法。C++的方式是使用std::vector和std::string:
#include <string>
#include <vector>
std::vector<std::string> hourtimes(100);
...
hourtimes[0] = "twelve";发布于 2018-06-23 05:54:39
这是一个字符串文字,可以用作指向常量char的指针,但不能用作指向非常数字符的指针。
"twelve"但是,您确实尝试将其赋给指向非常数字符的指针。
hourtimes[0] = "twelve";这就是编译器所不喜欢的。
https://stackoverflow.com/questions/50996014
复制相似问题