#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:文字列取得
少なくとも、下記ソースコードでは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);
}
これは、すーんさんが提示したソースコードと入力データを使用しています。
つまり、すーんさんが提示した範囲には何の問題も無い、というのが私の見解です。
もう一度言いますが、現象を再現できるソースコードを提示してください。
----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);
}