Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.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++ - Fatal编程技术网

C++ 输出未显示

C++ 输出未显示,c++,C++,问题是当输出本应显示hi时,却没有显示输出。我只是想知道为什么会发生这个错误 char * a() { char * c; char b[10]; b[0] = 'h'; b[1] = 'i'; b[2] = '\0'; for (int i = 0; b[i] != '\0'; i++) c[i] = b[i]; return c; } int main() { char * d; d = a

问题是当输出本应显示hi时,却没有显示输出。我只是想知道为什么会发生这个错误

 char * a() 
 {
    char * c;
    char b[10];
    b[0] = 'h';
    b[1] = 'i';
    b[2] = '\0';
    for (int i = 0; b[i] != '\0'; i++)
        c[i] = b[i];

    return c;
}

int main() 
{

    char * d;
    d = a();
    cout << d;
}
char*a()
{
char*c;
charb[10];
b[0]=“h”;
b[1]=“i”;
b[2]='\0';
对于(int i=0;b[i]!='\0';i++)
c[i]=b[i];
返回c;
}
int main()
{
char*d;
d=a();

cout您的程序中有几个错误。请注意,您创建了char类型的指针,然后执行如下操作: c[i] 这将导致错误。这不是您想要做的。 阿尔索 您不应该返回指向局部变量的指针/引用。局部变量离开作用域时会被销毁(在您的示例中,b在“return c;”处被销毁)。
所以,当您创建指向本地对象的指针(注意,您的变量是在堆栈上创建的,而不是在堆上创建的)并从函数返回时,您的指针指向被破坏的内存。它可能工作,但可能不工作(未定义的行为)但是你不应该做这样的事情。

当你想要一个数组时,你需要为项目分配空间。仅仅一个指针是不够的。比如

char* c= new char[10]; //room for 10 chars
确保不要尝试索引大于10-1=9。访问
c[10]
是未定义的行为

您可以返回该指针(
returnc;
),但不要忘记在不再需要时释放分配的内存

d = a();
cout << d;
delete [] d; //free memory allocated with new d[...]
d=a();

函数在一个未初始化的指针上写下,并破坏随机内存。如果编译器发出警告消息,这就是为什么你不应该忽略编译器中的警告消息,即使它仍然编译程序。如果编译器没有警告消息,也许你需要更好的C++。编译器。我没有收到任何警告。我在全局中定义了char*c,并尝试了这段代码,即使它不起作用。我现在想知道,我如何在不使用关键字string的情况下返回string元素,并将其存储在调用返回函数的char*中。“我没有收到任何警告”-然后你需要提高警告级别并将其视为错误。我在global中定义了char b[10],这样它就不会被破坏。即使在那时它也不起作用。我现在想知道,我如何在不使用关键字string的情况下返回string元素,并将其存储在调用返回函数的char*中。“string element”字母或符号是正确的吗?像“A”?或者你想返回,让我们说“某事”,但不是字符串,而是指向乞丐的字符指针?这是你想要实现的吗?当然这不是最好的解决方案,但是我想确保我们在同一页面上(即,如果你使用C++ +>=11,你就应该避免使用OVIN指针(使用新创建的))。,请改用智能指针!。在您的示例中,只返回std::string就可以了。有一种称为SSO(小字符串优化)的方法可以提高代码的效率。请相信您的编译器:D