这里是我的一段代码:如何初始化char **?
char** filename;
*(filename) = "initialize";
printf("filename = %s",*(filename));
我得到这个错误,当我试图运行它:
Run-Time Check Failure #3 - The variable 'filename' is being used without being initialized.
有什么办法解决这一问题?
这里是我的一段代码:如何初始化char **?
char** filename;
*(filename) = "initialize";
printf("filename = %s",*(filename));
我得到这个错误,当我试图运行它:
Run-Time Check Failure #3 - The variable 'filename' is being used without being initialized.
有什么办法解决这一问题?
您需要使用new或malloc为文件名分配空间。正因为如此,文件名只是一个指针的内存,你没有要求随机区...
filename = new char*;
您还没有分配,你想分配的char *到:
char** filename = new char*;
*filename = "initialize";
同样,不,它不是,除非你想选择* filename不是指向const的指针,在这种情况下,我会同意你的看法。 – Joel
char** filename = new char*;
*(filename) = "initialize";
printf("filename = %s",*(filename));
但是,为什么你需要那些东西?
谨慎解释,@Muntoo?这是正确的,因为'filename'需要有一个非空值保存'char *'的地址。这只是不正确的,因为''initialize''是一个数组衰减到'char const *'而不是'char *'的数组,所以'filename'的类型从一开始就是错误的。不能指责Ajay(或者Thomas,或者Joel)。 –
char *a = "abcdefg";
char **fileName = &a;
Ç方式:
#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
@ 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;
哇,这就对了!谢谢您的帮助! :D – zia
@muntoo:不,它不是。问题中的诊断消息表明文件名是未初始化的指针。它是一个指向char *的指针,所以filename = new char *是正确的,它使得文件名成为指向未初始化指向char的指针。现在,实际上是否需要双指针是一个单独的主题。 – Joel
是的,我相信这个记录会显示muntoo在这个上不正确。没关系 - 有时我们都会有点过分热情。 – Patrick87