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」が出力されます。なぜこれがtケースなのですか?ただし、エラーは発生しません。

4

3 に答える 3

5

無効な場所に書き込んでいます。あなたのプログラムは で静かにクラッシュしていstrcpy()ます。出力がバッファリングされるため、最初のHIものは印刷されません。最初の cout を次のように変更すると:

cout << "HI" << endl;

・・・きっと受かります。

プログラムがクラッシュする理由については、これにより文字列のアドレスが次のようになりますoutfile1

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

これにより、その文字列がゼロの場所にコピーされます。これにより、(OS によっては) 通常、プログラムが強制終了されます。

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

どちらの文字列にも割り当てられるメモリはありません。文字列リテラル "//tmp//Softwares//v//vdisk" へのポインターを設定するだけです。outFile1 から outFile2 にコピーしようとすると、上書きしてはいけないものを上書きしているか、何らかの理由で strcpy が他の場所で問題を引き起こしている可能性があります (未定義であるため、わかりにくい)。それはただの推測です。

于 2012-08-23T21:18:16.703 に答える
0

コードに関するいくつかの問題。1つはchar文字列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 に答える