2011-07-22 124 views
-1

这里是我的一段代码:如何初始化char **?

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

我得到这个错误,当我试图运行它:

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

有什么办法解决这一问题?

回答

1

您需要使用new或malloc为文件名分配空间。正因为如此,文件名只是一个指针的内存,你没有要求随机区...

filename = new char*; 
+0

哇,这就对了!谢谢您的帮助! :D – zia

+0

@muntoo:不,它不是。问题中的诊断消息表明文件名是未初始化的指针。它是一个指向char *的指针,所以filename = new char *是正确的,它使得文件名成​​为指向未初始化指向char的指针。现在,实际上是否需要双指针是一个单独的主题。 – Joel

+0

是的,我相信这个记录会显示muntoo在这个上不正确。没关系 - 有时我们都会有点过分热情。 – Patrick87

-1

您还没有分配,你想分配的char *到:

char** filename = new char*; 
*filename = "initialize"; 
+0

同样,不,它不是,除非你想选择* filename不是指向const的指针,在这种情况下,我会同意你的看法。 – Joel

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

但是,为什么你需要那些东西?

+0

谨慎解释,@Muntoo?这是正确的,因为'filename'需要有一个非空值保存'char *'的地址。这只是不正确的,因为''initialize''是一个数组衰减到'char const *'而不是'char *'的数组,所以'filename'的类型从一开始就是错误的。不能指责Ajay(或者Thomas,或者Joel)。 –

5
char *a = "abcdefg"; 
char **fileName = &a; 
4

Ç方式:

#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 
0

@ Naszta的答案是,你应该听的人。 但要纠正new所有这些其他错误答案:

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

做的真正 C++的方式是更好的,当然。

string filename = "initialize"; 
cout << "filename = " << filename;