ページ 1 / 1
文字列取得
Posted: 2010年5月28日(金) 22:31
by すーん
#define MARK '\"'
//中略//
for(i=0; html[18]!='\0'; i++)
{
if(html[18] == MARK)
{
i++;
while(html[18] != MARK)
{
tag[0][x] = html[18];
i++;
x++;
}
break;
}
}
printf("%s",tag[0]);
HTMLファイルを読み込み
配列htmlに一行ずつ格納してあります。
html[18]はHTMLファイルから読み込んだ18行目の文字列です。
そこで18行目のHTML文を一文字ずつ比較し、
ダブルクォーテンション(")で挟まれている
文字列を取得します。
上記のように記述し実行したところ
tag[0]は空(NULLではない)でした。
おかしいと思い
while(html[18] != MARK)
{
tag[0][x] = html[18];
printf("%c",tag[0][x]);
i++;
x++;
}
このようにwhile文の中に一文字ずつ表示させてみたのですが、
こっちでは正常に表示されました。
これはどういうことでしょうか?
対策方法、なぜこうなるか解説お願いします。
Re:文字列取得
Posted: 2010年5月28日(金) 22:34
by すーん
【HTMLの例】
<meta http-equiv="content-type" content="text/html;charset=shift_jis">
期待する実行結果は
tag[0]=>content-type
となってればいいのですが・・・
Re:文字列取得
Posted: 2010年5月29日(土) 00:55
by nishi
変数xを初期化していますか?
Re:文字列取得
Posted: 2010年5月29日(土) 03:03
by すーん
はい。
もちろんしています。
int x = 0;
Re:文字列取得
Posted: 2010年5月29日(土) 03:18
by ideyan
むむむ……関係あるかわからないけど、
tagに格納された文字列の最後に'\0'を入れてますか?
Re:文字列取得
Posted: 2010年5月29日(土) 03:22
by すーん
いや敢えて
tag[0][x] = '\0'
とはしていません。
Re:文字列取得
Posted: 2010年5月29日(土) 03:59
by Poco
> これはどういうことでしょうか?
> 対策方法、なぜこうなるか解説お願いします。
現状、対策の提示も解説もできません。
現象を再現できるソースコードを提示してください。
Re:文字列取得
Posted: 2010年5月29日(土) 06:17
by toyo
tag[0][x] = '\0'
がないため表示が変になっているのではないでしょうか
Re:文字列取得
Posted: 2010年5月29日(土) 08:06
by ideyan
最後の
printf("%s",tag[0]);
を
for(i=0;tag[0]!='\0';++i){
printf("%c",tag[0]);
}
として実行するとどうなりますか?
Re:文字列取得
Posted: 2010年5月29日(土) 08:32
by box
質問者さんが
>いや敢えて
>tag[0][x] = '\0'
>とはしていません。
と書かれている以上、
>printf("%s",tag[0]);
も
>for(i=0;tag[0]!='\0';++i){
> printf("%c",tag[0]);
>}
も、
tag[/url][/url]の定義範囲を超えてしまったとしても
'\0'が見つかるまで表示し続ける、という意味においては
同じだと思います。
Re:文字列取得
Posted: 2010年5月29日(土) 15:44
by Poco
少なくとも、下記ソースコードではtagの値は"content-type"になっています。
これは、すーんさんが提示したソースコードと入力データを使用しています。
つまり、すーんさんが提示した範囲には何の問題も無い、というのが私の見解です。
もう一度言いますが、現象を再現できるソースコードを提示してください。
----hoge.cpp
#include <stdio.h>
#define MARK '\"'
char html[/url] = "<meta http-equiv=\"content-type\" content=\"text/html;charset=shift_jis\">";
char tag[sizeof( html )];
int main()
{
for ( int i = 0, x = 0; html != '\0'; i++ ) {
if ( html == MARK ) {
i++;
while ( html != MARK ) {
tag[x++] = html[i++];
}
break;
}
}
printf("%s",tag);
}