如果我将字符串复制到NULL指针上,为什么C++不会打印任何内容?

0 c++ string pointers

我只是想试试这段代码......

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

using namespace std;

int main() {
      char *outFile1 = NULL;
      char *outFile2 = NULL;
      cout << "HI";
      outFile1 = "//tmp//Softwares//v//vdisk";
      strcpy(outFile2, outFile1);
      cout << "HI";
}
Run Code Online (Sandbox Code Playgroud)

如果我运行此代码......没有任何内容被打印.如果我评论"strcpy(outFile2,outFile1);"......两个"HI"都被打印出来.为什么这样?它并没有给我任何错误.

egr*_*nin 5

您正在写入无效的位置.你的程序在静默崩溃strcpy().第一个HI不打印,因为输出是缓冲的.如果您将第一个cout更改为:

cout << "HI" << endl;
Run Code Online (Sandbox Code Playgroud)

......你可能会得到它.

至于你的程序崩溃的原因,这会将字符串的地址放入outfile1:

outFile1 = "//tmp//Softwares//v//vdisk";
Run Code Online (Sandbox Code Playgroud)

这会将该字符串复制到零位置,这通常会杀死您的程序(取决于操作系统):

strcpy(outFile2, outFile1);
Run Code Online (Sandbox Code Playgroud)

  • 如果某个程序有未定义的行为,那么崩溃就是你所希望的最好的*. (3认同)