0

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

#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”都会被打印出来。为什么会出现这种情况?它不会给我任何错误。

4

3 回答 3

5

您正在写信到一个无效的位置。您的程序在strcpy(). 由于输出被缓冲,第一个HI不打印。如果您将第一个 cout 更改为:

cout << "HI" << endl;

......你可能会明白的。

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

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

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

strcpy(outFile2, outFile1);
于 2012-08-23T21:19:29.450 回答
1

没有为任一字符串分配内存。您只需设置一个指向字符串文字“//tmp//Softwares//v//vdisk”的指针。现在,当您将其从 outFile1 复制到 outFile2 时,您很可能会覆盖您不应该覆盖的内容,或者由于某种原因 strcpy 在其他地方引起了问题(很难说,因为它是未定义的)。这只是一个猜测。

于 2012-08-23T21:18:16.703 回答
0

您的代码存在一些问题,其中一个字符字符串 outFile2 尚未分配,因此您的程序可能会损坏堆栈并阻止正确显示输出。

尝试使用 malloc() 分配一些内存来保存要复制的字符串,或者使用 C++ std String 类 (http://www.cplusplus.com/reference/string/string/) 进行研究。C 内存分配类似于,

int slen=strlen(outFile1)+1;
outFile2 = (char *)malloc(sizeof(char)*slen);
strncpy(outFile2, outFile1, slen);
于 2012-08-23T21:24:03.073 回答