Как инициализировать char **? - PullRequest
0 голосов
/ 22 июля 2011

Вот мой кусок кода:

char** filename;
*(filename) = "initialize";
printf("filename = %s",*(filename));

Я получил эту ошибку при попытке запустить:

Run-Time Check Failure #3 - The variable 'filename' is being used without being initialized.

Есть ли способ это исправить?

Ответы [ 6 ]

5 голосов
/ 22 июля 2011
char *a  =  "abcdefg";
char **fileName = &a;
4 голосов
/ 22 июля 2011

C путь:

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

char * filename = (char*) malloc( 100 ); // reserve 100 bytes in memory
strcpy(filename,"initialize");           // copy "initialize" into the memory
printf("filename = %s",filename);        // print out
free(filename);                          // free memory
filename = 0;                            // invalid pointers value is NULL

C ++ путь:

#include <string>
#include <iostream>

string filename("initialize");           // create string object
cout << "filename = " << filename;       // write out to stanard out
1 голос
/ 22 июля 2011

Вам нужно выделить место для имени файла, используя new или malloc. На самом деле имя файла - это просто указатель на случайную область памяти, которую вы не запрашивали ...

  filename = new char*;
0 голосов
/ 22 июля 2011

@ Naszta ответ, который вы должны слушать. Но исправить все эти другие неправильные ответы на new:

size_t len = strlen("initialize") + 1;
char* sz = new char [len];
strncpy(sz, "initialize", strlen("initialize"));

real C ++ способ сделать это лучше, конечно.

string filename = "initialize";
cout << "filename = " << filename;
0 голосов
/ 22 июля 2011
char** filename = new char*;   
*(filename) = "initialize";    
printf("filename = %s",*(filename));

Но зачем вам этот материал?

0 голосов
/ 22 июля 2011

Вы не выделили символ *, который пытаетесь присвоить:

char** filename = new char*;
*filename = "initialize";
...