C++ 类型为“的值”*常量字符*”;无法分配给类型为“的实体”;字符*”;
所以我尽量避免使用字符串。我基本上是在尝试创建一个字符串数组C++ 类型为“的值”*常量字符*”;无法分配给类型为“的实体”;字符*”;,c++,string,malloc,C++,String,Malloc,所以我尽量避免使用字符串。我基本上是在尝试创建一个字符串数组 char **hourtimes = (char**)malloc(100 * sizeof(char*)); for (int i = 0; i < 100; i++) { (*hourtimes) = (char*)malloc((100 * sizeof(char))); } char**hourtimes=(char**)malloc(100*sizeof(char*); 对于(int
char **hourtimes = (char**)malloc(100 * sizeof(char*));
for (int i = 0; i < 100; i++) {
(*hourtimes) = (char*)malloc((100 * sizeof(char)));
}
char**hourtimes=(char**)malloc(100*sizeof(char*);
对于(int i=0;i<100;i++){
(*hourtimes)=(char*)malloc((100*sizeof(char)));
}
我在这里制作了一个字符串数组
现在,我想让小时[0]=“十二”
我试过做*hourtimes=“十二”代码>
但我得到了同样的错误,我认为这在c中是有效的,但我使用的是c++
hourtimes[0][0]='t'代码>
hourtimes[0][1]=“w”代码>
etc工作正常,但这太麻烦了。这是一个字符串文本,可以用作指向常量字符的指针,但不能用作指向非常量字符的指针
"twelve"
hourtimes[0] = "twelve";
但是,您确实尝试将其分配给指向非常量字符的指针
"twelve"
hourtimes[0] = "twelve";
这是编译器不喜欢的。这是一个字符串文本,可以用作指向常量字符的指针,但不能用作指向非常量字符的指针
"twelve"
hourtimes[0] = "twelve";
但是,您确实尝试将其分配给指向非常量字符的指针
"twelve"
hourtimes[0] = "twelve";
这是编译器不喜欢的。*hourtimes=“十二”
正在将*hourtimes
设置为指向只读内存中的字符串。然后,您将尝试修改存储在该只读内存中的数据。你要做的是把“十二”复制成*小时
strcpy(hourtimes[0],"twelve");
<强>注释:< /强>此回答是在问题被标记时,C.C++将有不同的首选方式来执行这种事情。
<代码> *小时时=“十二”< /C> >设置<代码> *小时/ <代码>指向只读存储器中的字符串。然后,您将尝试修改存储在该只读内存中的数据。你要做的是把“十二”复制成*小时
strcpy(hourtimes[0],"twelve");
<强>注释:<强>此答案是在问题被标记的时候编写的。C++将有不同的首选方式来执行这种事情。
< P>错误消息告诉你到底出了什么问题:不能将<代码> const char */Cube >分配给<代码> char */COD>。那是什么意思
const char*
和char*
都是类型。事实上,它们几乎是同一类型;一个是指向字符的指针,另一个是指向常量字符的指针。这意味着后者无法改变1;毕竟,这就是“常数”的含义。因此,当您试图告诉编译器将指向常量类型的指针视为指向非const
类型的指针时,它会给您一个错误,因为否则它无法保证字符串不会被修改
“whatever”
始终是一个常量字符*
,而不是字符*
,因为它存储在内存中,通常不需要修改,如果编译器可以安全地假设它是不变的(这是因为它是常量,所以它可以)
<>我不会告诉你如何正确地写你要写的代码,因为如果你使用C++,你应该使用<代码> STD::vector < /COD>和<代码> STD::String < /C> >而不是任何有指针的东西,只要可能,这里可能包括。无论出于何种原因,如果您需要使用指针,那么注释已经充分涵盖了这一点
1:好的,是的,它可以——但这超出了这个答案的范围,我不想让任何初学者感到困惑。错误消息告诉您确切的错误:您不能将常量字符*
分配给字符*
。那是什么意思
const char*
和char*
都是类型。事实上,它们几乎是同一类型;一个是指向字符的指针,另一个是指向常量字符的指针。这意味着后者无法改变1;毕竟,这就是“常数”的含义。因此,当您试图告诉编译器将指向常量类型的指针视为指向非const
类型的指针时,它会给您一个错误,因为否则它无法保证字符串不会被修改
“whatever”
始终是一个常量字符*
,而不是字符*
,因为它存储在内存中,通常不需要修改,如果编译器可以安全地假设它是不变的(这是因为它是常量,所以它可以)
<>我不会告诉你如何正确地写你要写的代码,因为如果你使用C++,你应该使用<代码> STD::vector < /COD>和<代码> STD::String < /C> >而不是任何有指针的东西,只要可能,这里可能包括。无论出于何种原因,如果您需要使用指针,那么注释已经充分涵盖了这一点
1:好的,是的,它可以——但这超出了这个答案的范围,我不想让任何初学者感到困惑。在分配循环中,(*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));
}
#include <string>
#include <vector>
std::vector<std::string> hourtimes(100);
...
hourtimes[0] = "twelve";
说到这里,这就是C语言处理字符串数组的方法。C++方式是使用<代码> STD::vector < /COD>和 >:
char **hourtimes = (char**)malloc(100 * sizeof(char*));
for (int i = 0; i < 100; i++) {
hourtimes[i] = (char*)malloc(100 * sizeof(char));
}
#include <string>
#include <vector>
std::vector<std::string> hourtimes(100);
...
hourtimes[0] = "twelve";
#包括
#包括
std::向量时数(100);
...
时间[0]=“十二”;
在分配循环中,(*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));
}
#include <string>
#include <vector>
std::vector<std::string> hourtimes(100);
...
hourtimes[0] = "twelve";
现在,说了这么多,这就是C的方式