http://www9.plala.or.jp/sgwr-t/c/Q/ens10-4.html
次のプログラムの空欄部を埋めて、プログラムを完成させなさい。
上記のリンクにある、上記の問題の回答が、
上記のソースコードですが、
p = "Winter";
の部分で、
"const char *" の値を使用して型 "char *" のエンティティを初期化することはできません
と表示されます。ポインタを使ってどう書けば、Winterを出力できますでしょうか。
ポインタを使って文字列を出力する方法
Re: ポインタを使って文字列を出力する方法
charへのポインターを 文字列リテラル で初期化します。文字列リテラルは書き込み禁止の領域に配置されます。
c1.c
c.bat
実行結果
c1.c
#include <stdio.h>
int main( void )
{
char *p;
const char *a = "Winter";
printf( "%s \n", p = a );
return 0;
}
F:\z18c\0630>c
F:\z18c\0630>rem コンパイル後リンク
F:\z18c\0630>cl /TC c1.c
Microsoft(R) C/C++ Optimizing Compiler Version 19.13.26128 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
c1.c
c1.c(7): warning C4090: '=': 異なる 'const' 修飾子です。
Microsoft (R) Incremental Linker Version 14.13.26128.0
Copyright (C) Microsoft Corporation. All rights reserved.
/out:c1.exe
c1.obj
F:\z18c\0630>rem 実行結果
F:\z18c\0630>c1.exe
Winter
F:\z18c\0630>
Re: ポインタを使って文字列を出力する方法
上記はVS2017Communityの場合です。
VS2008では
c1.c c.bat 実行結果
参考サイトが古いですね!(^^;
VS2008では
c1.c c.bat 実行結果
F:\z18c\0630>c
F:\z18c\0630>rem コンパイル後リンク
F:\z18c\0630>cl /TC c1.c
Microsoft(R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
c1.c
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:c1.exe
c1.obj
F:\z18c\0630>rem 実行結果
F:\z18c\0630>c1.exe
Winter
F:\z18c\0630>
Re: ポインタを使って文字列を出力する方法
そのソースコードのファイル名の拡張子は何ですか?NightShift さんが書きました: ↑5年前"const char *" の値を使用して型 "char *" のエンティティを初期化することはできません
と表示されます。ポインタを使ってどう書けば、Winterを出力できますでしょうか。
コンパイラは何を使って、どのようにコンパイルしていますか?
C では、char *p; p = "Winter"; はエラーになりませんが、
C++ では、const char *p; p = "Winter"; と書かないと
エラーになります。
-
- 記事: 10
- 登録日時: 6年前
Re: ポインタを使って文字列を出力する方法
Mathさん、かずまさん
ご解答ありがとうございました。拡張子が.pccだったので、constを書き加えたら、
コンパイルできました。
ご解答ありがとうございました。拡張子が.pccだったので、constを書き加えたら、
コンパイルできました。
Re: ポインタを使って文字列を出力する方法
本当ですか?
.cpp だったのではありませんか?
あなたは C と C++ のどちらを学習しているんですか?
http://www9.plala.or.jp/sgwr-t/c/Q/ens10-4.html
ここは「初心者のためのポイント学習C言語」のページですよ。
const を付けないとエラーのなるのは C++ です。
拡張子を .c にしてみてください。
コンパイラは何を使って、どのようにコンパイルしていますか?
Re: ポインタを使って文字列を出力する方法
Re: ポインタを使って文字列を出力する方法
char *p="Winter"; は char[]="Winter"; とちがって(たいてい)書き込み禁止の領域に配置されると本に書いてあったので処理系依存で VS2017,VS2008はアセンブラーで見ると(constをつけても)DATA セグメントに配置されていた( 実行結果はWinker です)失礼。