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

#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";
}


如果我运行此代码,将不会打印任何内容。如果我评论“ strcpy(outFile2,outFile1);” ...则同时打印“ HI”。为什么是这种情况?它并没有抛出我任何错误。

最佳答案

您正在写入无效的位置。您的程序在strcpy()上无提示地崩溃。由于输出已缓冲,因此第一个HI不打印。如果将第一个提示更改为此:

cout << "HI" << endl;


...您可能会得到它。

至于为什么程序崩溃,这会将字符串的地址放入outfile1

outFile1 = "//tmp//Softwares//v//vdisk";


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

strcpy(outFile2, outFile1);

10-01 05:17