2

所以我从文件中一个一个地读取字符:

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

您需要将终止温度设为空。

编辑

更改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' 字符结尾。由于您的tmp数组可以容纳三个字符并且它们都不是终止空字符,因此 strcmp (和任何其他字符串函数)会认为它会继续,读取分配空间之后的内存,直到它遇到空字符(或在它累到时崩溃读取受限的内存空间)。

字符串 "%20" 实际上是字符:'%', '2', '0', '\0'

所以修复它的最简单方法是声明tmp一个更大的并将 '\0' 分配给最后一个元素:

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