Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何初始化字符**?_C++_Visual Studio 2008_Char - Fatal编程技术网

C++ 如何初始化字符**?

C++ 如何初始化字符**?,c++,visual-studio-2008,char,C++,Visual Studio 2008,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分配空间。事实上,文件名只

以下是我的代码:

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分配空间。事实上,文件名只是指向未请求的随机内存区域的指针

  filename = new char*;

您尚未分配要分配给的字符*:

char** filename = new char*;
*filename = "initialize";
但是你为什么需要这些东西呢?

C方法:

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
#包括
#包括
#包括
char*filename=(char*)malloc(100);//在内存中保留100字节
strcpy(文件名,“初始化”);//将“初始化”复制到内存中
printf(“文件名=%s”,文件名);//打印出来
免费(文件名);//空闲内存
文件名=0;//无效指针值为空
C++方式:

#include <string>
#include <iostream>

string filename("initialize");           // create string object
cout << "filename = " << filename;       // write out to stanard out
#包括
#包括
字符串文件名(“初始化”);//创建字符串对象

你应该听听纳斯塔的答案。但要更正
new
上的所有其他错误答案,请执行以下操作:


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

string filename = "initialize";
cout << "filename = " << filename;
stringfilename=“初始化”;

cout@muntoo:不,不是。问题中的诊断消息表示文件名是未初始化的指针。它是指向char*的指针,因此filename=new char*将filename设置为指向char*的未初始化指针是正确的。现在,是否真的需要一个双指针是一个单独的话题。是的,我相信记录会表明muntoo在这个问题上是不正确的。没关系,我们有时都会有点过分热情。要不要解释一下,@Muntoo?只要
filename
需要一个非空值来保存
char*
的地址,这是正确的。这只是因为
“initialize”
是一个衰变为
字符常量*
的数组,而不是
字符*
,所以
文件名
的类型从一开始就是错误的。这不能怪Ajay(或Thomas,或Joel)。再说一次,不是,除非你想挑出*filename不是指向const的指针这一事实,在这种情况下,我同意你的看法。
size_t len = strlen("initialize") + 1;
char* sz = new char [len];
strncpy(sz, "initialize", strlen("initialize"));
string filename = "initialize";
cout << "filename = " << filename;