2

だから私はファイルから1つずつ文字を読んでいます:

char temp[3];

temp[0] = nextchar;
printf("%c",temp[0]); //prints %

temp[1] = nextchar = fgetc(srcptr);
printf("%c",temp[1]); //prints 2

temp[2] = nextchar = fgetc(srcptr);
printf("%c",temp[2]); //prints 0

if(strcmp(temp, "%20") == 0) { printf("%s","blahblah"); }

理想的には、これは最後に「blahblah」を印刷する必要があります。ただし、そうではありません。では、なぜstrcmpが0を返すのでしょうか。さらに重要なのは、どうすれば修正できるのでしょうか。

4

3 に答える 3

9

一時をnull終了する必要があります。

編集

char temp[3];に変更char temp[4]; temp[3] = 0;

于 2012-04-13T16:07:41.333 に答える
6

memcmp代わりに使用してください。両方の文字列が終了することをstrcmp期待しているためです'\0'(そうでtempはありません)。

if(memcmp(temp, "%20", sizeof(temp)) == 0) { printf("%s","blahblah"); }
于 2012-04-13T16:08:42.107 に答える
3

文字列は文字の配列であり、「\0」文字で終わります。配列は3文字を保持でき、いずれも終了ヌル文字ではないためtmp、strcmp(およびその他の文字列関数)はそれがさらに継続すると見なし、ヌル文字に遭遇するまで(または、疲れてクラッシュするまで、割り当てられたスペースを超えてメモリを読み取ります)制限されたメモリスペースを読み取ります)。

文字列"%20"は、実際には文字です:'%'、 '2'、 '0'、'\ 0'

したがって、これを修正する最も簡単な方法は、1つ大きいものを宣言tmpし、最後の要素に「\0」を割り当てることです。

char tmp[4];
...
tmp[3] = '\0';
于 2012-04-13T16:10:21.520 に答える