如何修改结构中定义的字符串的值?

Eri*_*ric -1 c++ string struct

根据您的意见,让我修改原来的问题......

我想创建一个大小为4kb的结构(这个大小是必需的,所以我必须满足它).问题是我无法修改结构中包含的字符串变量的值,因为编译器会抛出分段错误.目前,如果我使用指向字符串而不是字符串变量的指针,我现在知道如何做(感谢你们),但是,我读到了我用来分配4kb内存的方式(malloc)不是最好或最合适的.如果我使用"new"关键字,它会为struct动态分配足够的内存,它可能使用的值不同于4kb,对吧?这就是我不想要的.

我仍然怀疑为什么我不能修改我的struct中包含的字符串变量(不是指针)的值(类似于paginas - > dato ="test").它可能应该是使用malloc的结果

无论如何,我真的很感激你关于如何分配4kb内存的建议.

c ++中的原始代码如下:

#define TAM 4000
#define NUMPAGS 512

struct pagina 
{
   bitset<12> direccion; 
   char operacion; 
   char permiso;
   string *dato; //I prefer to have a string variable
   int numero;
}; 

void crearPagina(pagina* pag[], int pos, int dir) 
{
 pagina * paginas = (pagina*)malloc(sizeof(char) * TAM); 
 paginas -> direccion = bitset<12> (dir);
 paginas -> operacion = 'n';
 paginas -> permiso = 'n'; 
 string **tempDato = &paginas -> dato;
 char *temp = " ";
 **tempDato = temp;
 paginas -> numero = 0;
 pag[pos] = paginas;  
}
Run Code Online (Sandbox Code Playgroud)

提前致谢!!!

Jas*_*ams 5

dato是指向字符串的指针.也就是说,它告诉你在哪里查找字符串,但它实际上并不包含字符串.

因此,如果您希望为其分配字符串,则必须自行分配内存以保存字符串,并将指向该内存的指针提供给结构以便为您保留.

pagina->dato = new string("test");
Run Code Online (Sandbox Code Playgroud)

完成结构后,你需要记住释放字符串的内存,否则你会得到一个"内存泄漏"(因为同样,struct不负责包含字符串的内存,只是为了记住你把它):

delete pagina->dato;
pagina->data = NULL;
Run Code Online (Sandbox Code Playgroud)