2

cmd を使用して、.bat および g++.exe でコンパイルします。誰かが私が間違ったことを教えてもらえますか? 文字列と配列に関するチュートリアルに従って、練習に使用しています。まだまだ勉強中ですのでよろしくお願いします。

main.cpp: In function 'int main()':
main.cpp:6:12: warning: deprecated conversion from string constant to 'char*' [-
Wwrite-strings]
main.cpp:10:12: warning: deprecated conversion from string constant to 'char*' [
-Wwrite-strings]
main.cpp:11:12: warning: deprecated conversion from string constant to 'char*' [
-Wwrite-strings]
Press any key to continue . . .

私のコード:

      using namespace std;
#include <iostream>

int main() {
//Asterisk to make the variable an array. Takes 8 bytes of memory (8 characters including spaces).
 char *a = "hi there";
//Inside square brackets is the number of bytes of memory to use. More consumtion of resources
 char b[500]="hi there";
 //For a new line, type \n. For a tab, type \t.
 char *c = "Hi There\nFriends!";
 char *d = "\t\tHi There Friends!";
 //endl will end the line.
 cout << a;
 cout << b << endl;
 cout << c << endl;
 cout << d << endl;
}
4

1 に答える 1

7

二重引用符で囲まれた文字列は文字列リテラルです。これらは変更できない配列ですchar(変更しようとすると、未定義の動作が発生します)。そのため、文字列リテラルを指すポインターを次のように宣言する必要があります。const char *このようにすると、一部のコードがリテラル内の文字を誤って書き込み/変更しようとすると、コンパイラーはこのエラーをキャッチする可能性があります。

于 2013-04-02T05:12:22.597 に答える