<出力>
------ ビルド開始: プロジェクト: h17spring001, 構成: Debug Win32 ------
コンパイルしています...
h17spring001.cpp
.\h17spring001.cpp(45) : error C2664: 'print_string' : 3 番目の引数を
'CHARPROF **' から 'CHARPROF *' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル
キャストまたは関数スタイルのキャストが必要です。
ビルドログは "file://c:\Users\sunao\Documents\Visual Studio
2008\Projects\h17spring001\h17spring001\Debug\BuildLog.htm" に保存されました。
h17spring001 - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
<プログラム>
// h17spring001.cpp : メイン プロジェクト ファイルです。
#include "stdafx.h"
#include <stdio.h>
using namespace System;
typedef struct{ char char_p;
int char_w;
} CHARPROF;
void print_string(int,char *[],CHARPROF *,int);
int word_width(char *,CHARPROF *);
void print_string(int line_w, char *str_list[], CHARPROF *char_list, int
space_w){
int cur_w = 0, str_w , idx;
for(idx = 0; str_list[idx] != NULL; idx++){
str_w = word_width(str_list[idx],char_list);
cur_w += str_w;
if(cur_w == str_w)
printf("%s", str_list[idx]);
else{
cur_w += space_w;
if(cur_w <= line_w)
printf(" %s",str_list[idx]);
else{
cur_w = str_w;
printf("\n%s",str_list[idx]);
}
}
}
putchar('\n');
}
int word_width(char *str, CHARPROF *char_list){
int print_w = 0,idx;
while(*str !='\0'){
for(idx = 0; *str != char_list[idx].char_p; idx++);
print_w += char_list[idx].char_w;
str++;
}
return print_w;
}
int main(void)
{
CHARPROF *test0001;
char *z[10]={"Hello World"};
print_string(80,z,&test0001,1);
}
On Wed, 18 Mar 2009 11:24:59 +0900
"sunao furukawa" wrote
in message news:eyO4#C3pJH...@TK2MSFTNGP05.phx.gbl...
> コンパイルが通らない
> int main(void)
> {
> CHARPROF *test0001;
> char *z[10]={"Hello World"};
> print_string(80,z,&test0001,1);
> }
> CHARPROF *test0001;
ポインターで宣言して
> print_string(80,z,&test0001,1);
ポインターのアドレスを渡してますね。
その他の関数の内容は見ていないので…。
--
ちゅ
int main(void)
{
print_string(80, "Hello World",char_list,1);
}
<出力>
------ ビルド開始: プロジェクト: h17spring001, 構成: Debug Win32 ------
コンパイルしています...
h17spring001.cpp
.\h17spring001.cpp(43) : error C2065: 'char_list' : 定義されていない識別子です。
ビルドログは "file://c:\Users\sunao\Documents\Visual Studio
2008\Projects\h17spring001\h17spring001\Debug\BuildLog.htm" に保存されました。
h17spring001 - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
というわけで、char_listの定義の仕方がわかりません、どなたかいい例を教えてください。
On Wed, 18 Mar 2009 16:24:38 +0900
"sunao furukawa" wrote
in message news:25CE5B8D-BBA0-4006...@microsoft.com...
> Re: コンパイルが通らない
>.\h17spring001.cpp(43) : error C2065: 'char_list' : 定義されていない識別子です。
定義されていない識別子 なので
CHARPROF char_list; // 実体を定義
// char_list のポインター(アドレス)を渡す
print_string(80, "Hello World", &char_list,1);
その他の関数の内容は見ていないので…。
C++入門
http://www.asahi-net.or.jp/~yf8k-kbys/newcpp0.html
一度、読まれて見てください。
--
ちゅ
for(idx = 0; (*str)!= char_list[idx].char_p; idx++);
print_w += char_list[idx].char_w;
str++;
}
return print_w;
}
int main(void)
{
CHARPROF test0001;
char *z[10]={"この広い野原いっぱい咲く花をひとつ残らずあなたにあげる"};
print_string(80,z,&test0001,1);
}
<出力>
'h17spring001.exe': 'C:\Users\sunao\Documents\Visual Studio
2008\Projects\h17spring001\Debug\h17spring001.exe' を読み込みました。シンボルが読み込まれました。
'h17spring001.exe': 'C:\Windows\System32\ntdll.dll' を読み込みました
'h17spring001.exe': 'C:\Windows\System32\mscoree.dll' を読み込みました
'h17spring001.exe': 'C:\Windows\System32\kernel32.dll' を読み込みました
'h17spring001.exe':
'C:\Windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_none_bb1f6aa1308c35eb\msvcr90d.dll'
を読み込みました
'h17spring001.exe':
'C:\Windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_none_bb1f6aa1308c35eb\msvcm90d.dll'
を読み込みました
'h17spring001.exe': 'C:\Windows\System32\ole32.dll' を読み込みました
'h17spring001.exe': 'C:\Windows\System32\msvcrt.dll' を読み込みました
'h17spring001.exe': 'C:\Windows\System32\gdi32.dll' を読み込みました
'h17spring001.exe': 'C:\Windows\System32\user32.dll' を読み込みました
'h17spring001.exe': 'C:\Windows\System32\advapi32.dll' を読み込みました
'h17spring001.exe': 'C:\Windows\System32\rpcrt4.dll' を読み込みました
'h17spring001.exe': 'C:\Windows\System32\imm32.dll' を読み込みました
'h17spring001.exe': 'C:\Windows\System32\msctf.dll' を読み込みました
'h17spring001.exe': 'C:\Windows\System32\lpk.dll' を読み込みました
'h17spring001.exe': 'C:\Windows\System32\usp10.dll' を読み込みました
'h17spring001.exe': 'C:\Windows\System32\shlwapi.dll' を読み込みました
'h17spring001.exe':
'C:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.6000.16386_none_5d07289e07e1d100\comctl32.dll'
を読み込みました
'h17spring001.exe':
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll' を読み込みました
'h17spring001.exe':
'C:\Windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.3053_none_d08d7bba442a9b36\msvcr80.dll'
を読み込みました
'h17spring001.exe': 'C:\Windows\System32\shell32.dll' を読み込みました
'h17spring001.exe':
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\Culture.dll' を読み込みました
'h17spring001.exe':
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\Culture.dll' をアンロード
'h17spring001.exe':
'C:\Windows\assembly\NativeImages_v2.0.50727_32\mscorlib\c068708e16abf0be77a21b9f29817d83\mscorlib.ni.dll'
を読み込みました
'h17spring001.exe' (マネージ型):
'C:\Windows\assembly\GAC_32\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll'
が読み込まれました
'h17spring001.exe': 'ImageAtBase0x6f5b0000' を読み込みました
'h17spring001.exe': 'ImageAtBase0xd20000' を読み込みました。シンボルが読み込まれていません。
'h17spring001.exe': 'ImageAtBase0x6f5b0000' をアンロード
'h17spring001.exe':
'C:\Windows\assembly\GAC_MSIL\mscorlib.resources\2.0.0.0_ja_b77a5c561934e089\mscorlib.resources.dll'
を読み込みました。バイナリはデバッグ情報と一緒にビルドされませんでした。
'h17spring001.exe' (マネージ型):
'C:\Windows\assembly\GAC_MSIL\mscorlib.resources\2.0.0.0_ja_b77a5c561934e089\mscorlib.resources.dll'
が読み込まれました
'h17spring001.exe' (マネージ型): 'c:\Users\sunao\Documents\Visual Studio
2008\Projects\h17spring001\Debug\h17spring001.exe' が読み込まれました。シンボルが読み込まれました。
'h17spring001.exe':
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorjit.dll' を読み込みました
'h17spring001.exe':
'C:\Windows\Microsoft.NET\Framework\v2.0.50727\diasymreader.dll' を読み込みました
'h17spring001.exe': 'C:\Windows\System32\rsaenh.dll' を読み込みました
'h17spring001.exe' (マネージ型):
'C:\Windows\WinSxS\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_none_bb1f6aa1308c35eb\msvcm90d.dll'
が読み込まれました
'h17spring001.exe':
'C:\Windows\assembly\NativeImages_v2.0.50727_32\System\57ac9ba5419d6bf4b79f2979b0755428\System.ni.dll'
を読み込みました
'h17spring001.exe' (マネージ型):
'C:\Windows\assembly\GAC_MSIL\System\2.0.0.0__b77a5c561934e089\System.dll'
が読み込まれました
'System.AccessViolationException' の初回例外が h17spring001.exe で発生しました。
'System.AccessViolationException' のハンドルされていない例外が
h17spring001.exe で発生しました。
追加情報: 保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。
<中断しました>
という出力が出て止まってしまいます。カーソルは、34行目の
for(idx = 0; (*str)!= char_list[idx].char_p; idx++);
という行で止まっています。このプログラムは平成17年の春の基本情報技術者試験のプログラムにmainの行を書き加えて実行しようと思ったものです。
そのためとは言いませんがどのように直したらいいのかわかりません。どなたか御教授の方お願いします。
On Thu, 19 Mar 2009 10:24:36 +0900
"sunao furukawa" wrote
in message news:DA16D912-C143-4F41...@microsoft.com...
> Re: コンパイルが通らない
> このプログラムは平成17年の春の基本情報技術者試験の
>プログラムにmainの行を書き加えて実行しようと思ったものです。
>そのためとは言いませんがどのように直したらいいのかわかりません。
先ずはC言語の勉強から始めて下さい。
C言語が分からない状態で説明しても無駄になります。
最低限度、自分でコードを読む事が出来なければ
先に進めませんよ。
文法とポインター・配列・文字列の概念などは最低限度
習得しておかないとこの問題は分からないと思います。
--
ちゅ
int main(void)
{
CHARPROF test0001;
char z[12]="Hello world";
print_string(80,&z[0],&test0001,1);
}
<出力>
------ ビルド開始: プロジェクト: h17spring001, 構成: Debug Win32 ------
コンパイルしています...
h17spring001.cpp
.\h17spring001.cpp(45) : error C2664: 'print_string' : 2 番目の引数を 'char
*' から 'char *[]' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル
キャストまたは関数スタイルのキャストが必要です。
http://情報処理試験.jp/FE17a-pm/t06.html
ですか。
このプログラムが何をするものかは分かっていますか?
print_string()の第3引数にも値を設定する必要がある
というのは分かりますか。
print_string()の第2引数は単語の配列で最後は NULL と
あることにも注意してください。
こんな感じかな。(プログラムとしては不完全です)
int main(void)
{
CHARPROF test0001[] = {
{'T', 10}, {'h', 7}, {'i', 5}, {'s', 7},
{'a', 7}, {'p', 7}, {'e', 7}, {'n', 7},
{'.', 3} /* 数値は適当 */
};
char *z[]={"This", "is", "a", "pen.", NULL};
/* 改行させてみる */
print_string(60, &z[0], test0001, 1);
return 0;
}
---
やま
On Mon, 23 Mar 2009 01:49:21 +0900
"やま" wrote
in message news:ObxHh4wq...@TK2MSFTNGP04.phx.gbl...
> http://情報処理試験.jp/FE17a-pm/t06.html
こんなWebが有るんですね。
知らなかった…。
--
ちゅ
"やま" <syam...@hotmail.com> wrote in message
news:ObxHh4wq...@TK2MSFTNGP04.phx.gbl...
勉強になりました。どうもありがとうございます。理解できたことを書いてみます。
1、英文の文字と文字幅を考えてcharへのポインタ型の配列z[]の内容を決める("This"などは文字列の配列で値としてその文字列の先頭のアドレスを持つ)。
2、構造体CHARPROFは1で決めた配列に沿った内容で文字そのもの(''でくくる)と文字ごとの文字幅のサイズを決めて初期化する。
3、改行させたい時はint line_wの値(この場合は60)を超えるようにCHARPROFの各int char_wの値(もしくは合計値)を決める。
文を書くのが下手なのでちゃんと表現できてはいないかもしれませんが自分なりには以上のように理解しました。疑問は解決しました。何回も下手な質問をしたにもかかわらず、親切なご回答ありがとうございました。
> 1、英文の文字と文字幅を考えてcharへのポインタ型の配列z[]の内容を決める(
>"This"などは文字列の配列で値としてその文字列の先頭のアドレスを持つ)。
> 2、構造体CHARPROFは1で決めた配列に沿った内容で文字そのもの(''でくくる)と
>文字ごとの文字幅のサイズを決めて初期化する。
> 3、改行させたい時はint line_wの値(この場合は60)を超えるようにCHARPROFの各
>int char_wの値(もしくは合計値)を決める。
私はコンパイルエラーにならないような例を示しただけなので、
それを元に推測するとおかしな方向に行ってしまいます。
print_string は単語の途中で改行されないように
英文を出力するプログラムということなので
*char_list は *str_list[] にどのような単語が
与えられても大丈夫なようにしておかなくてはなりません。
(私の例では This is a pen. は大丈夫ですが、
I am a cat. は正しく動作しません。すなわち、
*char_list は'T' や 'h' だけでなく 全ての文字の定義を
与えなければなりません。)
また、改行は文章を長く(単語数を多く)すればいいものです。
60にしたのは改行する例のほうがいいかなと思っただけです。
line_wの値を変えて改行させるというのは本来の使い方では
ありません。
---
やま